0 基本知识
0.1 匹配(match)
0.2 捕获(capture)
0.3 替换(replace)
-
获取特征对象
pattern = re.compile("\\s+")
-
匹配目标字符串
match = pattern.match("hello world")
1 贪婪模式和非贪婪模式
1.1 概念解释
在整个表达式匹配成功的前提下:
贪婪模式:尽可能多的匹配(.*)--(来者不拒)
非贪婪模式:尽可能少的匹配(.*?)--(见好就收)
Python中数量词默认是贪婪模式
1.2 代码示例
import re
s = "aaabc11123aaabc"
# print(s)
pattern_1 = re.compile('a.*?b')
match_1 = pattern_1.findall(s)
print(match_1) # 结果为 ['aaab', 'aaab']
pattern_2 = re.compile('a.*b')
match_2 = pattern_2.findall(s)
print(match_2) # 结果为 ['aaabc11123aaab']
(1)a.*?b,非贪婪模式
代表从a开始,碰到第一个b即为结束,下一匹配又是以a开始,以b结束的特征字串。所以匹配到两个结果;
(2)a.*b,贪婪模式
代表从a开始,一直往下匹配,直到最后一个b结束
2 不同括号,不同含义
- []----字符集
- {n}---数量,n次
- ()----分组,一个括号对代表一组
如([a-z0-9]{3}) ([A-Z]+)
,前一组为连续的三个小写字母或数字字符(可混),后一组为一个或多个连续的大写字母。注意,两组中间有个空格,说明这两组只能匹配两个字符串。
3 匹配中文
在Unicode字符集中,中文大多数位于[\\u4e00-\\u9fa5]
,要匹配中文,注意将源字符串,(要查找的内容)为Unicode编码,如s = u"服了you"
一些小东西
1. compile(re.*)
pattern = re.compile('\[a-z]+',re.I)
(大写的 i),表示忽略大小写pattern = re.compile('\[a-z]+',re.S)
表示将源字符串按一个整体进行匹配,而不是一次只匹配一行