字符匹配
. 任意字符(除了换行)
\w 字母数字及下划线
\d 数字
\s 空白符
\W 非字母数字及下划线
\D 非数字
\S 非空白符
\t, \n, \r 制表符,换行符,退格符
长度匹配
* 任意个字符
+ 至少一个字符
? 0或1个字符
{n,m} n-m个字符
{n} 表示n个字符
范围控制
范围表示 [0aA] [0-9a-zA-Z] [^0-9a-z] ## 注:只匹配一个
\b 匹配单词首或尾边界,以 \W 为边界
\B [^b],以 \w 为边界
或者 |
某种开头 ^
某种结尾 $
分组()
特殊字符,使用 \ 进行转义
匹配模式
默认贪婪模式,匹配尽可能多的字符
使用 ? 变为非贪婪模式:+? *?
默认为单行搜索,不匹配换行符
python 正则模块 re
re.match(pattern, str, flags=0) # 从字符串开头匹配
re.search(pattern, str, flags=0) # 从任意位置搜索,返回第一次匹配的结果
flags 有:
- re.I(re.IGNORECASE) 忽略大小写
- re.L(re.LOCALE) 使 \w,\W,\b,\B,\s 本地化
- re.M(re.MULTILINE) 多行模式,匹配换行符,影响 ^ 和 $
- re.S(re.DOTALL) 使 . 匹配所有字符,包括换行
- re.U(re.UNICODE) 按Unicode标准来考虑 \w, \W, \b, \B, \d, \D, \s, \S
- re.X(re.VERBOSE) 忽略空白符(除非在字符串或’\’之后),可以使用’#’号注释,不过不能在字符串或’\’之后
RegexObject.group(num=0) # 返回匹配的以及分组的结果
RegexObject.groups() # 返回分组的结果
m=re.match(r’^(\d{3})-(\d{3,8})$’, ‘010-12345’) # search 用法一样
m.group() # 010-12345
m.group(0) # 010-12345
m.group(1) # 010
m.group(2) # 12345
m.groups() # (‘010’,’12345’)
re.findall(pattern, str, flags=0) # 搜索方式和search相同,不过以列表返回全部搜索结果
re.finditer(pattern, str, flags=0) # 类似findall,不过返回一个迭代对象
re.sub(pattern, repl, string, count=0, flags=0) # 字符串替换,按 pattern 在 string 中搜索,搜索到的替换为 repl
re.split(pattern, str, flags=0) # 以正则模式进行分割
编译
在python中使用正则表达式时,re模块会先编译正则表达式,再用编译的正则表达式去匹配字符串
re.compile() # 预编译,出于效率的考虑,以重复使用预编译的正则表达式
re_telphone = re.compile(r’^(\d{3})-(\d{3,8})$’)
re_telphone.match(‘010-12345’).groups()