正则:
使用正则表达式需要引入 re模块 , 使用步骤如下:
compile(正则,模式) 方法:生成pattern实例;模式可传 re.I 或 re.M 等
re.I 不区分大小写,忽略大小写
re.M 多行匹配,影响 ^ 和 $
import re #定义正则表达式, 编译成Pattern实例 p = re.compile('a.b') #使用实例,获得匹配结果 test = re.match(p, 'a3b') print(test.group(0)) # a3b
正则表达式字符含义(列举部分,更多查询文档):
. 表示除了换行符 外的任意字符
表示转义,改变后面一个字符的原来意义
* 表示前一个字符可以为0个或者多个
+ 表示前一个字符至少为1个或者多个
? 表示前一个字符为0个或者1个
^ 表示以某个字符开头
$ 表示以某个字符结尾
{m, n} 表示匹配次数, 表示最少m次。表示最多n次
[] 表示字符集中任意字符 例如 [123456798]
() 表示分组, 例如 (abc){2}
预定义字符集:
d : 表示 0 ~ 9
D : 表示除了 0 ~ 9 的所有字符,非数字
s : 表示任何空白字符
S : 表示除了空白字符的任意字符
w : 表示 [0-9A-Za-z]
W : 表示除了 [0-9A-Za-z] 即特殊字符
A: 表示以 某个字符开头,等价于 符号 ^
: 表示以某个
:表示单词边界
匹配函数:
match(pattern, string) 方法: 从字符串起始位置开始匹配,如果不是起始位置匹配成功的话,返回none ,如果匹配成功,返回Match 对象
#定义正则表达式, 编译成Pattern实例 p = re.compile('ab') #使用实例,获得匹配结果 test = re.match(p, 'sabc') print(test.group()) # none
search (pattern, string) 方法: 对字符串进行整体匹配,找到第一个匹配的值后返回,后续的不再进行匹配。,返回Match 对象
#定义正则表达式, 编译成Pattern实例 p = re.compile('ab') test = re.search(p, 'sabcabab') print(test.group()) # ab
findall(pattern,string): 以列表形式输出所有匹配的字符串,查找全部,返回列表
import re #定义正则表达式, 编译成Pattern实例 p = re.compile('ab',re.M) print(re.findall(p, 'abcdefgab')) # ['ab', 'ab']
finditer(pattern, string): 已迭代器形式返回所有匹配的字符串,查找全部,返回迭代器
p = re.compile('ab',re.M) m = re.finditer(p, 'abcdefgab') print(next(m).group()) # ab
sub(pattern, repl, string, count = 0): 根据正则替换字符串中指定字符 ; repl 表示替换的新字符,string表示要被替换的字符串, count表示替换的次数,不传默认为 0 ,替换全部
import re text = '1a2a3a4a5a6a7a' p = re.compile('a') new = re.sub(p, '', text) print(new) #132467
匹配函数传参:
pattren 表示匹配的正则表达式 ;
string 表示需要匹配的字符串 ;
flags 表示标志位,用于控制正则表达式的匹配方式,如 是否区分大小写、多行匹配等;可选
Match对象方法:
group() 方法: 返回匹配成功的字符串,不传参或传0 的情况下,返回匹配的所有字符串;当匹配的正则有分组时,依次传参1,2,3输出对应的正则组所匹配的字符
groups() 方法: 以元组形式返回所匹配的各个字符串,以分组形式, 没有分组的情况下返回()
start() 方法: 返回开始匹配的字符位置
end() 方法: 返回结束匹配的字符位置
span() 方法: 以元组形式同时返回开始匹配和结束匹配的位置
p = re.compile('ab') test = re.search(p, 'sabcabab') print(test.group()) # ab print(test.groups()) # () print(test.start()) # 1 print(test.end()) # 3 print(test.span()) # (1, 3)
p = re.compile('(ab)(cd)(ef)') test = re.search(p, 'abcdefg') print(test.group()) # abcdef print(test.group(1)) # ab print(test.group(2)) # cd print(test.groups()) # ('ab', 'cd', 'ef')