1、简单匹配:
- \d →匹配一个数字
- \w →匹配一个数字或字母
- \s →匹配一个空格(包括tab等空白符)
- . →匹配任意字符
- * →匹配任意个字符(包括0个)
- + →匹配至少一个字符
- {n}→匹配n个字符
- {n,m}→匹配n到m个字符
2、进阶匹配:
- [] →表示范围,如[0-9a-zA-Z]可以匹配一个数字或一个字母
- []+ →表示匹配至少一个
- []* →表示匹配任意个,如[0-9a-zA-Z]*可以匹配任意个数字或任意个字母
- []{n,m}→表示匹配n到m个
- A|B →表示既可以匹配A,也可以匹配B
- ^ →表示匹配的开头
- $ →表示匹配的结束
- () →表示分组
3、re模块:
最基本的使用:
import re re.match(r'正则表达式','待匹配的字符串') #匹配成功,返回一个Match对象。不然,返回None
编译后再匹配:
import re re_compile = re.compile(r'正则表达式') re.match('待匹配字符串')
4、其他用途(待补充):
- 匹配分割字符串,re.split(),如去除空格与一些其他的符号:
# 去除空格
import re a_str = 'a b c' a_str_out = re.split(r'\s+', a_str) print(a_str_out) #['a','b','c']
b_str = 'a b , c ,;d'
b_str_out = re.split(r'[\s\,\;]+', b_str)
#['a','b','c','d']
- 分组,match.group(),group(0)是原始字符,group(1),group(2)...对应后续的每一个分组()
import re a_str = '111-11111' a_match = re.match(r'(\d{3})-(\d{5})',a_str) a_match.group(0) # '111-11111' a_match.group(1) # '111' a_match.group(2) # '11111'
5、需要注意的
- 为了不被字符串转义的问题困扰,建议使用Python的r前缀。即r''
- 正则表达式的匹配是贪婪匹配。实现非贪婪匹配用?
对于 120300,r'^(\d+)(0*)$' 匹配后的分组为(‘120300’,‘’)
而 r'^(\d+?)(0*)$' 匹配后的分组为('1203', '00')
\d+会尽可能多的匹配,\d+?会尽可能少的匹配
看了廖老师的正则表达式模块后,因为经常容易忘记一些语句,所以写下博文方便日后回顾。感谢廖老师!
参考链接:https://www.liaoxuefeng.com/wiki/1016959663602400/1017639890281664