zoukankan      html  css  js  c++  java
  • python re正则表达式

    re正则表达式

    使用方法:

    re.compile(pattern, flags=0)
    re.match(pattern, string, flags=0) 从头开始匹配,匹配单个
    re.search(pattern, string, flags=0) 匹配包含,匹配单个
    re.findall(pattern, string, flags=0) 把所有匹配到的字符放到以列表中的元素返回,match and search均用于匹配单值,即:只能匹配字符串中的一个,如果想要匹配到字符串中所有符合条件的元素,则需要使用 findall。
    re.split(pattern, string, maxsplit=0, flags=0) 以匹配到的字符当做列表分隔符
    re.sub(pattern, repl, string, count=0, flags=0) 匹配字符并替换
    re.fullmatch(pattern, string, flags=0) 整个字符串匹配成功就返回re object, 否则返回None
    re.finditer(pattern, string, flags=0) 生成一个生成器,处理大量数据时,节省内存

    *参数的含义
    pattern 正则表达式
    string 要匹配的字符串
    flags 标志位,用于控制正则表达式的匹配方式
    Flags标志符
    re.I(re.IGNORECASE): 忽略大小写(括号内是完整写法,下同)
    M(MULTILINE): 多行模式,改变'^'和'$'的行为
    S(DOTALL): 改变'.'的行为,make the '.' special character match any character at all, including a newline; without this flag, '.' will match anything except a newline.
    X(re.VERBOSE) 可以给你的表达式写注释,使其更可读,下面这2个意思一样

    正则表达式符号的含义:
    '.'     默认匹配除
    之外的任意一个字符,若指定flag DOTALL,则匹配任意字符,包括换行
    '^' 匹配字符开头,若指定flags MULTILINE,这种也可以匹配上(r"^a"," abc eee",flags=re.MULTILINE)
    '$' 匹配字符结尾, 若指定flags MULTILINE ,re.search('foo.$','foo1 foo2 ',re.MULTILINE).group() 会匹配到foo1
    '*' 匹配*号前的字符0次或多次, re.search('a*','aaaabac') 结果'aaaa'
    '+' 匹配前一个字符1次或多次,re.findall("ab+","ab+cd+abb+bba") 结果['ab', 'abb']
    '?' 匹配前一个字符1次或0次 ,re.search('b?','alex').group() 匹配b 0次
    '{m}' 匹配前一个字符m次 ,re.search('b{3}','alexbbbs').group() 匹配到'bbb'
    '{n,m}' 匹配前一个字符n到m次,re.findall("ab{1,3}","abb abc abbcbbb") 结果'abb', 'ab', 'abb']
    '|' 匹配|左或|右的字符,re.search("abc|ABC","ABCBabcCD").group() 结果'ABC'
    '(...)' 分组匹配, re.search("(abc){2}a(123|45)", "abcabca456c").group() 结果为'abcabca45'
    '[]' 分组[]内时或的关系,相当于一个字符,在[]内只有^非 -区间符号 转义有功能


    'A' 只从字符开头匹配,re.search("Aabc","alexabc") 是匹配不到的,相当于re.match('abc',"alexabc") 或^
    '' 匹配字符结尾,同$
    'd' 匹配数字0-9
    'D' 匹配非数字
    'w' 匹配[A-Za-z0-9]
    'W' 匹配非[A-Za-z0-9]
    's' 匹配空白字符、 、 、 , re.search("s+","ab c1 3").group() 结果 ' '
    '(?P<name>...)' 分组匹配 re.search("(?P<province>[0-9]{4})(?P<city>[0-9]{2})(?P<birthday>[0-9]{4})","371481199306143242").groupdict("city") 结果{'province': '3714', 'city': '81', 'birthday': '1993'}

    反斜杠的困扰
    与大多数编程语言相同,正则表达式里使用""作为转义字符,这就可能造成反斜杠困扰。假如你需要匹配文本中的字符"",那么使用编程语言表示的正则表达式里将需要4个反斜杠"\\":前两个和后两个分别用于在编程语言里转义成反斜杠,转换成两个反斜杠后再在正则表达式里转义成一个反斜杠。Python里的原生字符串很好地解决了这个问题,这个例子中的正则表达式可以使用r"\"表示。同样,匹配一个数字的"\d"可以写成r"d"。有了原生字符串,你再也不用担心是不是漏写了反斜杠,写出来的表达式也更直观。
    import re
    
    
    def phone_id(phone_number):
        ret = re.findall("^1[358]d{9}", phone_number)
        if ret:
            print("您输入的手机号是%s" % phone_number)
        else:
            print("您输入的手机号不合法")
    
    
    while True:
        number = input("请输入您的手机号:").strip()
        
        if number == "exit":
            exit()
        else:
            phone_id(number)
    验证手机号
    import re
    s = re.findall("([^()]*)", "12+(34*5-6*(2-1))")
    a = "".join(s)
    t = re.findall("[^()]*", a)
    print(t)
    计算器


     
  • 相关阅读:
    (Java实现) 洛谷 P1106 删数问题
    (Java实现) 洛谷 P1603 斯诺登的密码
    (Java实现) 洛谷 P1036 选数
    (Java实现) 洛谷 P1012 拼数
    (Java实现) 洛谷 P1028 数的计算
    (Java实现) 洛谷 P1553 数字反转(升级版)
    (Java实现) 洛谷 P1051 谁拿了最多奖学金
    (Java实现) 洛谷 P1051 谁拿了最多奖学金
    (Java实现) 洛谷 P1106 删数问题
    目测ZIP的压缩率
  • 原文地址:https://www.cnblogs.com/zt0903/p/10687112.html
Copyright © 2011-2022 走看看