- 单个字符
普通字符:就是一对一的完整匹配 []:匹配指定范围内的任意一个字符 [abc]:任意一个字符 [0-9]:所有的数字 [a-zA-Z]:所有的字母 [^0-9]:除了数字以外的字符 \d:数字字符,等价于[0-9] \D:非数字字符,等价于[^0-9] \w:所有的字(数字、下划线、字母汉字等) \W:非字 \s:匹配空白字符(空格、\n、\t、\r) \S:非空白字符 \b:词边界(开头、结尾、空格、标点) \B:非词边界 . :匹配除\n以外的任意字符
- 次数限定
格式 说明 {m} m次 {m, n} m~n次 {m,} 至少m次 {,m} 至多m次 ? 至多一次 + 至少一次 * 任意次数 - 边界判断
^
:以指定的内容开头$
:以指定的内容结尾- 示例:
import re # ^:以指定内容开头 # c = re.compile(r'^hello') # $:以指定内容结尾 c = re.compile(r'hello$') s = c.search('hakshehello') if s: print(s.group())
|
的使用import re # |:或的意思,拥有最低的优先级 # 若想指定优先级可以使用() c = re.compile(r'hell(o|w)orld') # s = c.search('helloorld') s = c.search('hellworld') if s: print(s.group())
- 贪婪匹配
- 贪婪:在满足条件的情况下,最大限定的匹配。正则的匹配默认是贪婪的。
- 非贪婪:只要满足条件,能少匹配就少匹配。
- 示例:
import re # ?可以取消.+至少一次的贪婪 # c = re.compile(r'a.+?b') # ?可以取消.*任意多次的贪婪 c = re.compile(r'a.*?b') s = c.search('sahdjabbbbbasdja') if s: print(s.group())
- 匹配模式
import re # re.I:忽略大小写的匹配 s = re.search(r'hello', 'Helloworld', re.I) if s: print(s.group()) # re.M:多行匹配,默认是单行 s = re.search(r'^hello', 'ashdjah\nhellosdajdksa', re.M) if s: print(s.group()) string = '''<div> xxx </div>''' # re.S:单行处理,可以让.匹配包括\n的字符 s = re.search(r'<div>.*?</div>', string, re.S) if s: print(s.group())
- 分组匹配
- 示例一:
import re c = re.compile(r'(\d+)([a-z]+)(\d+)') s = c.search('adhaksj123dshfjsl456kdasdj') if s: # 完整的匹配结果 print(s.group(), s.span()) # 等价于上面的式子 print(s.group(0), s.span(0)) # 指定组号,获取对应组的匹配信息 print(s.group(1), s.span(1)) print(s.group(2), s.span(2)) print(s.group(3), s.span(3)) # 匹配的所有组信息 print(s.groups())
- 示例二:
import re # 固定匹配 # c = re.compile(r'<div><a>\w+</a></div>') # 无名分组:\1表示前面的第一组,即第一个()匹配的结果 # c = re.compile(r'<([a-z]+)><([a-z]+)>\w+</\2></\1>') # 命名分组: c = re.compile(r'<(?P<goudan>[a-z]+)><(?P<dahua>[a-z]+)>\w+</(?P=dahua)></(?P=goudan)>') s = c.search('<div><a>千锋教育</a></div>') # s = c.search('<div><a>千锋教育</div></a>') if s: print(s.group()) # 所有的匹配信息,适用于所有分组 print(s.groups()) # 所有的匹配信息,是一个字典,用于命名分组 print(s.groupdict())
标签: python
版权声明:除非特别标注,否则均为本站原创文章,转载时请以链接形式注明文章出处。
还木有评论哦,快来抢沙发吧~