正则表达式
Regular Expression ,缩写regex,regexp,RE等
正则表达式式文本处理的重要技术,用它可对字符串按照某种规则进行检索
元字符
代码 | 说明 | 举例 |
---|---|---|
[abc] | 表示一个字符位置,匹配字符集合中的任意一个字符 | [abc]匹配apple中的'a' |
[^abc] | 表示一个字符位置,匹配除去集合内字符的任意一个字符 | [^abc]匹配apple中的'p''p''l''e' |
[a-z] | 表示一个字符位置,表示匹配范围内的字符(闭区间) | [a-z][0-9] |
[^a-z] | 表示一个字符位置,表示除去范围内的字符(闭区间) | [a-z][0-9] |
d | 表示一个字符位置,[0-9]中一个数字 | |
D | 表示一个字符位置,表示[^0-9]中非数字 | |
s | 表示一个字符位置,匹配一个空白字符包括换行,制表符,空格[f v] | |
S | 表示一个字符位置,匹配一个非空白字符 | |
w | 表示一个字符位置,匹配[a-zA-Z0-9]包括中文 | |
W | 表示一个字符位置,匹配w之外的字符 | |
. | 表示一个字符位置,匹配除换行符外任意一个字符 | abc. .abc |
* | *前一个字符可以重复0到无数次 | |
+ | +前一个字符重复至少一次 | |
? | ?前一个字符重复0次或者一次 | |
^ | 表示以xxx开头 | ^ab 表示以ab开头的 |
$ | 以xxx结尾 | ab$ 表示以ab结尾的 |
{n} | 重复固定n次 | ew{1}单词中e后面只能有一个非空白字符 |
{n,} | 重复至少n次 | ew{1,}等价于ew+ |
匹配的单词的边界 | b找到文本中b开头的单词 | |
x|y | 匹配x或者y |
没写一个字符位置的就是一个或多个字符位置
-
单行模式:.可以匹配所有字符,包括换行符,^表示整个字符串的开头,$表示整个字符串的结尾 使用re.S进入单行模式
-
多行模式:.可以匹配存了换行符之外的字符 ,^表示行首,$表示行尾.开始指的是 后紧接着下一个字符,结束指的是 前的字符 默认多行模式
捕获(分组)
s = 'abc abcd abcfdd'
print(re.findall('a(.)c(d)', s))
>>>[('b', 'd')]
只返回a后面有东西,c后面有d 匹配后返回二元组列表
贪婪模式
s = 'abcdefgbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbg'
print(re.findall('a.*g', s))
>>>['abcdefgbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbg']
非贪婪模式
s = 'abcdefgbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbg'
print(re.findall('a.*?g', s))
>>>['abcdefg']
re模块
常量
常量 | 说明 |
---|---|
re.M | 多行模式 |
re.S | 单行模式 |
re.I | 忽略大小写 |
re.X | 忽略表达式中空白字符 |
使用| 位或运算开启多种选项
方法
编译
re.complile(pattern,flags=0)
设定flags,编译模式,返回正则表达式对象regex。
pattern就是正则表达式字符串,flags是选项。正则表达式需要被编译。
单次匹配
re.match(pattern,string,flag=0)
从字符串开头开始匹配,返回match对象
re.search(pattern,string,flag=0)
从头搜索第一个匹配,返回match对象
全文搜索
re.findall(pattern,string,flag=0)
对整个字符串,从左至右匹配,返回所有匹配项列表
匹配替换
re.sub(pattern,replacement,string,flag=0)
将匹配字符转用replacement代替,返回新字符串
re.subn(pattern,replacement,string,count = 0flag=0)
返回一个元组,count显示替换了多少次