美文网首页
Python中的正则表达式语法

Python中的正则表达式语法

作者: octocat | 来源:发表于2018-08-13 14:23 被阅读0次
    • .匹配除了换行符之外的所有字符
    import re
    re.compile(r'.').match('\n') # return None
    
    • ^$表示匹配开头和结尾
    • *表示匹配0个或者多个 +表示匹配一个或者多个 ?表示匹配0个或者一个
    • 贪婪模式
      *, ?+都会尽可能的匹配多个字符,但是 *?,??+?都会尽可能少的匹配字符,比如
    import re
    re.compile(r'<p>(.*)</p>').match('<p>a</p><p>b</p>').groups()[0] # return 'a</a><a>b'
    re.compile(r'<p>(.*?)</p>').match('<p>a</p><p>b</p>').groups()[0] # return 'a'
    re.compile(r'a[b]?').match('ab').group() # return ab
    re.compile(r'a[b]??').match('ab').group() # return a
    
    • {}
      {m}表示应该前面的正则精确的匹配m
      {m,n} 表示前面的正则应该出现m~n
      {,n} 表示0~n
      {m,}表示m次之上
      {m,n}?表示非贪婪的匹配
    import re
    re.compile('\w{3,5}').match('abcdefg').group() # return abcde
    re.compile('\w{3,5}?').match('abcdefg').group() # return abc
    
    • \表示转义字符

    • []表示一个字符集合

      • 字符可以被单独罗列,例如:[amk] 会匹配 'a', 'm', 或 'k'.
      • 可以表示范围,如[a-zA-Z_0-9]表示匹配字母数字下划线。
      • 在集合内,特殊字符失去特殊意义。[.]只是表示匹配.
      • 可以使用如\w or \S等字符类别
      • ^[]中表示非,如[^\d]表示匹配所有非数字的字符
    • ...|...表示或,左右两边的表达式有一个成立那么就会匹配到

    • (...) 表示标识一段和正则匹配的字符。其后可以使用 \number 对应的数字来使用,如:

    # 表示匹配单引号中的内容
    re.compile(r'(\')(.*?)\1').match('\'hello\'').groups()[1] # return hello 
    # \1 表示 第一个括号里面的单引号
    
    • (?iLmsux) 表示特别的匹配规则
      (?i)表示大小写不敏感
    re.compile(r'(?i)a').match('A').group() # return A
    

    这个的作用和将flag 参数加入到compile中是一个作用

    • (?:...)
      表示括号里面的正则不会被捕获到,即不会出现在 groups中,但是也不能用 \number来引用了
    • (?P<name>...)
      Django中的url就是使用这样的方式,这样的方式的有什么作用呢?可以使用变量名称来指代匹配字符,如:
    import re
    re.compile(r'(?P<name>\w+)').match('lucy').group('name') # lucy
    # 匹配引号里面的内容
    re.compile(r'(?P<quote>[\'"])(.*?)(?P=quote)').match('"haha"').group()
    # (?P=quote) 就是对 (?P<quote>...) 的引用
    
    • (?#...)
      正则里面的打注释
    • (?=...)
      是目标字符串结束位置做的限制,如:
    import re
    re.compile(r'famil(?=y|ies)').match('family').group() # famil
    re.compile(r'famil(?=y|ies)').match('families').group() # famil
    
    • (?!...)(?=...)类似,但是意思是非
    • (?<=...)
      是对目标字符串开始位置做的限制,如:
    import re
    re.compile(r'(?<=17)[\d]{9}').search('17600000000').group() # 600000000
    # (?<=...)括号里面的正则只能匹配固定宽度的正则,如 [a]{3} 这种,不能匹配非固定长度的正则,如 {3,5}这种
    # 否则会报 error: look-behind requires fixed-width pattern 的异常
    # 这个地方只能使用search,而不能使用match。因为match是开头匹配,而search是查找
    
    • (?<!...)(?<=...) 类似,但是意思是非
    • \b 表示匹配单词结束
      \bfoo\b可以匹配 foofoo.(foo)bar foo baz,但不能匹配foobarfoo3

    相关文章

      网友评论

          本文标题:Python中的正则表达式语法

          本文链接:https://www.haomeiwen.com/subject/lhbybftx.html