re模块
[字符组] #在同一个位置上可能出现的各种字符组成一个字符组。
字符:
. 匹配除换行符以外的任意字符(一个字符)
w 匹配字母或数字或下划线
s 匹配任意的空白符 (tab,空格等)
d 匹配数字
匹配一个换行符
匹配一个制表符
匹配一个单词的结尾(需要指定结尾的字符)
^ 匹配字符串的开始(写在开头)
¥ 匹配字符串的结尾(写在结尾)
W 匹配非字母或非数字或非下划线
D 匹配非数字
S 匹配非空格符
a|b 匹配字符a或b (优先匹配左边)
() 匹配括号内的表达式,也表示一个组。(对整体进行量词约束)
[...] 匹配字符组中的字符
[^...] 匹配除了字符串中字符的所有字符
量词:
* 重复零次或更多次
+ 重复一次或更多次
? 重复零次或一次
{n} 重复n次
{n,} 重复n次货更多次
{n,m} 重复n到m次
匹配是贪恋匹配,尽可能多的匹配到,如果后面加上?则会变成非贪婪匹配,最小匹配。
转义符:
r’ ’ #前面的r表示不需要转义
re.findall(‘正则’,‘字符串’) #查找出所有的匹配项,并返回成列表
ret = re.findall(‘www.(baidu|oldbody).com’,’www.oldbody.com’)
输出会是 oldbody,因为正则里的()分组的原因,如要打印所有,需要在条件中修改成:www.(?:baidu|oldbody).com
re.search(‘正则’,‘字符串’) #查找,无返回空,有则返回包含匹配信息的对象(找到第一个就返回),需要用 返回值.group() 来打印结果。
re.match(‘正则’,‘字符串’) #必须从头开始匹配。同样返回需要用group()来显示。匹配不上则返回None。
re.split(‘正则’,‘字符串’) # [ab] 分隔 babcd,先用a分隔,再用b对后面的进行分隔。分隔时,如果前面没有元素,则用空填补。
如果正则变成分组,将会保留分隔标识,标识自成一个元素。
re.sub(‘’,’H’,’abcd1hasd’,1) #把字符串中的数字()替换成H,只替换一个。默认是全部替换。
re.subn(‘’,’H’,’abcd1hasd’) #返回替换的结果跟替换的次数,结果是一个元组。
obj = re.compile(‘{3}’) #将正则表达式编译成一个正则表达式对象。
ret = obj.search(‘abdedf122agcd’) #正则表达式对象调用search,参数为待匹配对象。
<(?P<tag_name>w+)>w+</(?P=tag_name)> <h1>hello</h1>
后面的tag_name 为引用分组,表示跟前面的匹配内容一致。
(?P<id>) ?P<id> 给这个分组起名字为id,用group()索引时可以用id来查找。
.group(‘tag_name’) #返回 h1
.group() #返回 <h1>hello</h1>
re.search(r”<(w+)>w+</1>”,”<h1>hello</h1>”) #1表示第一个分组
ret = re.finditer(‘d’,’adef2fad3fadfa’) #返回一个存放匹配结果的迭代器
for I in ret:
print(i.group()) #需要group()来看结果。
需要group()出结果的,正则如果分组,将会自动变成多个输出,用group的参数控制当索引进行输出。
flag
re.I #忽略大小写
re.m #多行模式,改变^和$的行为
re.S #点可以匹配任意字符,包括换行符
re.L #做本地化识别的匹配,表示特殊字符集w,W,,B,s,S依赖当前环境,不推荐使用。
re.U #使用 w W S s d D取决于unicode定义的字符属性,python3中默认使用该flag
re.x #冗长模式,该模式下pattern字符串可以是多行的,忽略空白字符,并可以添加注释。
| (或) #从左往右匹配,匹配上就不继续匹配了,所以应该把长的放前面。