. ^ $ * + ? {} [] \ | ()
以上都被成为元字符
元字符之 . : 它会匹配除了换行符以外的任何字符,如果设置了re.DOTALL标志,它也将匹配包括换行符在内的任何字符
元字符之[]:可以把所有需要匹配的内容放到[]内,[a-z]表示任何小写字母
元字符之^: [^3]表示会匹配除了‘5’之外的任何字符
元字符之*:用于指定前一个字符匹配零次或多次,比如do*g会破匹配dg,dog,dooog
元字符之+:用于指定前一个字符匹配一次或多次
元字符之?:用于指定前一个字符匹配零次或者一次
元字符之{}:{m,n}指定前一个字符必须匹配m次到n次,{0,} == *,{1,}== +,{0,1}==?,{n}表示前一个字符重复n次
元字符之\:反斜杠会将后面的元字符去除特殊功能,反斜杠+普通字符实现特殊功能
当需要匹配带\的字符串时最好使用原始字符串r'';例如,若要匹配‘\sex’,使用反斜杠就要使用‘\\\\sex’,使用原始字符串r'\\sex'
特殊字符 | 含义 |
\d | 匹配任何十进制数字,相当于[0-9] |
\D | 与\d相反,匹配任何非十进制数字的字符,相当于[^0-9] |
\s | 匹配任何空白字符(包括换行符制表符空格),相当于[\t\n\r\f\v] |
\S | 与\s相反 |
\w | 匹配任何单词字符 |
\W | 与\w相反 |
\b | 匹配单词的开始或结束 |
\B | 与\b相反 |
match() | 判断一个正则表达时是否从开始处匹配一个字符串 |
search() | 遍历字符串,找到正则表达式匹配的第一个位置 |
findall() | 遍历字符串,找到正则表达式匹配的所有位置,并以列表的形式返回 |
finditer() | 遍历字符串,找到正则表达时匹配的所有位置,并以迭代器的形式返回 |
import re
p = re.compile('匹配规则')
>>> p = re.compile('[a-z]+')
>>> m=p.match('kiss') #也可使用 m=p.search('kiss')
>>> m.group() #返回匹配的字符串
'kiss'
>>> m.start() #返回匹配的开始位置
0
>>> m.end() #返回匹配的结束位置
4
>>> m.span() #返回一个元组表示匹配位置
(0, 4)
>>>
search()与match()的区别:
>>> import re
>>> p = re.compile('[a-z]+')
>>> m = p.search('<><cat')
>>> m.start()
3
>>> print(p.match('<><cat'))
None
>>>
标志 | 含义 |
ASCII,A | 使得转义符号如\w,\b,\s和\d只能匹配ASCII字符 |
DOTALL,S | 使得.匹配任何符号,包括换行符 |
IGNORECASE,I | 匹配的时候不区分大小写 |
LOCALE,L | 支持当前的语言设置 |
MULTILINE,M | 多行匹配,影响^和$ |
VERBOSE,X(for ‘extended’) | 启用详细的正则表达时 |
#加入括号后对字符串分割之后保留分割字符
>>> re.split('\W+','runoob, runoob, runoob.')
['runoob', 'runoob', 'runoob', '']
>>> re.split('(\W+)','runoob, runoob, runoob.')
['runoob', ', ', 'runoob', ', ', 'runoob', '.', '']
>>>