python re模块学习笔记
程序员文章站
2022-07-09 23:07:14
...
re模块-正则
元字符 | 描述 | 举例 | 结果 | 分析 |
---|---|---|---|---|
. |
通配符, 匹配任意 1个 字符 | re.findall(‘w..l’,‘hello world’) | worl | |
^ |
从头开始(行首)匹配 | re.findall(’^h…o’,‘world hello’) | [] | 从开头匹配h |
$ |
以结束 匹配 | re.findall(‘h…o$’,‘hello world’) | [] | 以o结尾匹配 h…o |
* |
重复匹配 0或多次 | re.findall(‘e.*d’,‘hello world’) | ello world | 匹配 0或多次 任意字符 e开头,d结尾 |
+ |
重复匹配至少1次 <=> {1,+oo} | re.findall(‘h.+w’,‘hello world’) | hello w | 匹配 h开头 ,1或多次,任意字符,w结尾 |
? |
匹配 0或1个 <=> {0,1} | re.findall(‘a?b’,‘aaaabkjoiheo’) | [‘ab’] | 匹配0或1个a以b结尾 |
{} |
{n} , 匹配n次 | 1、re.findall(‘a{1,5}b’,‘abbaaaaabbbbb’) 2、re.findall(‘a{5}b’,‘abbaaaaabbbbb’) |
1、[‘ab’,‘aaaaab’] 2、 [‘aaaaab’] |
— |
[] |
字符集 1. 取消元字符的特殊功能, 除了(’ \ ’,’^ ’,’- ’)2. |
re.findall(’[w*]’,‘asdx*’) | [‘w’,’*’] | — |
\ |
1.反斜杠后边跟元字符去除其特殊功能; 2. 反斜杠后边跟普通字符(部分)实现特殊功能
|
1.\d 匹配任何【十进制数】 —> [0-9];2.\D 匹配任何【非数字字符】 —> [^0-9] ; 3.\s 匹配任何【空白字符】 —> [ \t\n\r\f\v];【4.\w 匹配任何【字母、数字字符】 —> [0-9a-zA-Z]; 5.\W 匹配任何【非字母、数字字符】 —> [^0-9a-zA-Z];6.\b 匹配一个特殊字符边界,即单词和空格间的位置(空、空格、$…) |
— | — |
() |
分组 | re.search(’(as)+’,‘sdjkfasasf’) | [‘asas’] | 以 as 作为一个整体,重复匹配 |
| |
管道符 —> 或
|
re.search(’(as)|3’,‘3sdjkfasasf’) | [‘3’] | — |
拓展 :
*?
—># 惰性匹配?:
—># 取消优先级r
—># 原生字符串,原生字符串,忽略特殊字符。即r"\ - + . *"
等,\
、*
不再是特殊含义[]
# 字符集
re.findall('a[cd]x','acx') # >>> ['acx'] , [c,d]任取一个--->或 即 'c' ',' 'd' re.findall('a[cd,e]x','adx') # >>> ['adx'] re.findall('a[cd]x','acdx') # >>> [] # [a-z] # >>> 匹配 a-z 范围内的任意一个字符 # [a-z0-9A-Z] # [0-9a-zA-z] # [0-9]{11}
[^]
# —> 取反
re.findall('[^a]','asdx*') # >>> ['sdx']
re.findall('[^as]','asdx') # >>> ['dx'] ===> [^(a,s)]
()
一个组 , ?P给这个组起名字 , 组名为groupName , \d{3} 匹配规则 匹配3个数字
dd = re.search('(?P<id1>\d{3})/(?P<id2>\w{3})','weew34ttt123/ooo') # >>>123/ooo \w{3} 匹配三个字母 dd.group('id2') # >>> ooo
推荐使用
:
*
、+
、?
re模块中的方法
:
- re.
findall()
#全匹配,返回匹配的所有结果,作为一个列表
re.findall('w\w{2}l','hello world') # >>>worl
# 转义 re.findall('\\\\','abc\de') # >>> ['\\'] # 等价 re.findall(r'\\','abc\de')
re 的
\也有特殊意义
- re.
search()
# 返回匹配到的第一个对象(objetc),对象可以调用group()方法返回结果(匹配出第一个满足条件的结果)
mm=re.search('sb','dkkdjfkjsbkljlisb') # >>> ...object: span=(8,10),match='sb' ,span ===> 范围,只找一个 mm.group() # >>>sb #等价 mm=re.search('sb','dkkdjfkjsbkljlisb').group
ss = re.search('(?P<groupName>\d{3})','weew34ttt123/000') # >>>123
- re.
match()
# 只在字符串开始匹配,成功则返回一个对象(object)- re.
split()
# 字符串分割
re.split('[af]','kkkaiiifooo') # 逐个分 # >>> 1 kkk iiifooo # 最终结果:>>> 2 kkk iii ooo
- re.
sub(,,n)
# n 替换n次
re.sub('l.....e','s.....b','kjoejlangkyefo') # >>> kjoejs.....bfo
- re.
compile()
# 编译正则对象
sub = re.compile('\.com') # 将正则规则 编译为正则 对象 sub.findall('www.baidu.com') >>> .com
下一篇: Python正则re模块学习笔记