关于一些预定义的字符集能够运用转义码能够越发紧凑的示意,re能够辨认的转义码有3对,6个,分别为三个字母的大小写,他们的意义是相反的。
\d : 一个数字
\D : 一个非数字
\w : 字母或许数字
\W : 非字母,非数字
\s : 空白符(制表符,空格,换行符等)
\S : 非空白符
假如想指定婚配的内容在文本的相对位置,能够运用锚定,跟转义码相似。
^ 字符或行的最先
$ 字符或行的完毕
\A 字符串的最先
\Z 字符串完毕
\b 一个单词开首或许末端的空串
\B 不在一个单词开首或末端的空串
import re
the_str = "This is some text -- with punctuation"
re.search(r'^\w+', the_str).group(0) # This
re.search(r'\A\w+', the_str).group(0) # This
re.search(r'\w+\S*$', the_str).group(0) # punctuation
re.search(r'\w+\S*\Z', the_str).group(0) # punctuation
re.search(r'\w*t\W*', the_str).group(0) # text --
re.search(r'\bt\w+', the_str).group(0) # text
re.search(r'\Bt*\B', the_str).group(0) # 没有婚配
用组来剖析婚配,简朴的说就是在一个正则表达式中有几个小括号()将婚配的表达式分红差别的组,运用group()函数来猎取某个组的婚配,个中0为全部正则表达式所婚配的内容,背面从1最先从左往右顺次猎取每一个组的婚配,即每一个小括号中的婚配。运用groups()能够猎取一切的婚配内容。
import re
the_str = "--aabb123bbaa"
pattern = r'(\W+)([a-z]+)(\d+)(\D+)'
match = re.search(pattern, the_str)
match.groups() # ('--', 'aabb', '123', 'bbaa')
match.group(0) # '--aabb123bbaa'
match.group(1) # '--'
match.group(2) # 'aabb'
match.group(3) # '123'
match.group(4) # 'bbaa'
python对分组的语法做了扩大,我们能够对每一个分组举行定名,如许便能够运用称号来挪用。语法:(?P<name>pattern)
,运用groupdict()能够返回一个包括了组名的字典。
import re
the_str = "--aabb123bbaa"
pattern = r'(?P<not_al_and_num>\W+)(?P<al>[a-z]+)(?P<num>\d+)(?P<not_num>\D+)'
match = re.search(pattern, the_str)
match.groups() # ('--', 'aabb', '123', 'bbaa')
match.groupdict() # {'not_al_and_num': '--', 'not_num': 'bbaa', 'num': '123', 'al': 'aabb'}
match.group(0) # '--aabb123bbaa'
match.group(1) # '--'
match.group(2) # 'aabb'
match.group(3) # '123'
match.group(4) # 'bbaa'
match.group('not_al_and_num') # '--'
match.group('al') # 'aabb'
match.group('num') # '123' '
match.group('not_num') # 'bbaa'
以上的group()要领在运用的时刻须要注重,只要在有婚配的时刻才会一般运转,否则会抛错,所以在不能保证有婚配而又要输出婚配效果的时刻,必需做校验。
在re中能够设置不通的标志,也就是search()和compile()等中都包括的缺省变量flag。运用标志能够举行完成一些特别的请求,如疏忽大小写,多行搜刮等。
import re
the_str = "this Text"
re.findall(r'\bt\w+', the_str) # ['this']
re.findall(r'\bt\w+', the_str, re.IGNORECASE) # ['this', 'Text']
关于搜刮选项有许多,详细可检察文档 http://docs.python.org/2/library/re.html#module-re