Python3中的re模块提供与Perl中类似的正则表达式匹配操作
^
匹配字符串的开头
$
匹配字符串的结尾
.
匹配任意字符,除了换行符,当re.DOTALL标记被指定时,则可以匹配包括换行符的任意字符
[...]
用来表示一组字符,例如[amk]匹配 a 或 m 或 k
[^...]
匹配不在[]中的字符,例如[^abc]匹配除了a,b和c之外的字符
re*
匹配0次或多次前面的表达式
re+
匹配1次或多次前面的表达式
re?
匹配0次或1次前面的表达式
re{n}
n为数字,匹配n次前面的表达式
re{n, m}
n,m为数字,匹配n到m次前面的表达式,最少n次,最多m次
re_a|re_b
匹配表达式re_a或表达式re_b
(re)
全匹配括号内的表达式,也表示一个组
w
匹配字母数字及下划线,相当于[A-Za-z0-9]
W
匹配非字母数字及下划线,相当于[^A-Za-z0-9]
d
匹配一个数字字符,相当于[0-9]
D
匹配一个非数字字符,相当于[^0-9]
s
匹配任何空白字符,相当于[ f v],注意f的前面有个空格
S
匹配非任何空白字符,相当于[^ f v],注意f的前面有个空格
re模块常用的方法
re.match(pattern, string, flags=0)
如果在字符串的开头的零个或更多字符匹配正则表达式模式,将返回相应的MatchObject实例,返回None则与模式不匹配
re.search(pattern, string, flags=0)
扫描字符串,寻找的第一个由该正则表达式模式产生匹配的位置,并返回相应的MatchObject实例,返回None则与模式不匹配
re.sub(pattern, repl, string, count=0)
匹配正则表达式成功后将其替换成指定字符串
pattern为匹配的正则表达式,repl为要替换的字符,string为扫描的字符串,count为替换次数
re.fullmatch(pattern, string, flags=0)
参考re.match(),只不过它是全匹配整个字符串,re.match()只匹配开头
re.split(pattern, string, maxsplit=0, flags=0)
利用正则表达式进行字符串分割
re.purge()
清除正则表达式缓存
注:
flags参数是匹配模式,比如可以忽略大小写进行匹配,很少用,具体参考:
re.match只匹配字符串的开始,如果字符串开始不符合正则表达式,则匹配失败,函数返回None
re.search匹配整个字符串,直到找到一个匹配
pattern既可以是一个正则表达式字符串,也可以是通过re.compile()方法编译过的正则对象,有需要可以深入了解
import re phone_number_regex = r"^1[34578]d{9}$" # 中国大陆手机号简单正则表达式 phone_number = "1234567" match_object = re.match(phone_number_regex, phone_number) if match_object: print("这是一个手机号!") else: print("这是一个非法手机号!")
import re # 用户名要求由字母、数字和下划线组成,且不能以数字和下划线开头,最低6位,最高不能超过16位 user_name_regex = r"^[a-zA-Z]w{5,15}$" user_name = "q12@3_4_5" match_object = re.match(user_name_regex, user_name) if match_object: print("这是一个合法用户名!") else: print("这是一个非法用户名!")