RE模块使用
import re
match
li = re.match('\d*', '12821j128j312893j129') # match方法,先使用正则表达式,然后传入待查字符串
print(li) # 结果对象 <_sre.SRE_Match object; span=(0, 5), match='12821'> if li: print(li.group()) # 获得数据12821 ,如果没有就会报错
# 如果没有,就无操作
# 所有的match方法都认为是以。。。开头
re.match('\d+') # 相当于^\d+
re.search('\d+','12821j128j312893j129') li = re.match('\d*', '12821j128j312893j129') #这两行效果相同
match可以被替换
search
li = re.search('\d*', '12821j128j312893j129') # 在文本中查找 print(li) # 结果对象 <_sre.SRE_Match object; span=(0, 5), match='12821'> if li: print(li.group()) # 获得数据12821 ,如果没有就会报错
findall
li = (re.findall('\d*', '12821j128j312893j129')) # 查找所有的符合规则的字符串,并添加到列表中 print(li) # 结果对象 <_sre.SRE_Match object; span=(0, 5), match='12821'> if li: print(li.group) # 获得所有匹配规则的数据
sub
ret = re.sub('\d+', 'sb', 'alex,wsir123', 1) # z将字符串的内容替换出来 print(ret) # 替换数字类型为sb,替换一次,如果不给这个 1,默认替换所有符合条件的
subn
print(re.subn('\d+', 'sb', 'alex,wsir123')) # 用法与sub相同,但是这个的返回值是一个元组,结果和替换了几次
split
print(re.split('\d+', 'alex,wsir123', )) # 如果对正则表示中使用分组,那么分组中的内容也会被保存在列表中 # 用法与字符串的相同,以符合条件的当切割条件
compile
用来提前加载要使用的正则表达式
par = re.compile('\d+') # 将写好的正则表达式进行编译,还有可以直接调用 par.finditer('\d', 'asdfaf') # 迭代器,处理数据量比较大的,这个迭代器中存的是结果集
特别注意:
ret = """ <h1>hahaha<\h1> <h2>wahaha<\h2> <title>qqxing<\title> """ res = re.findall('>(\w+)<', ret) print(res) # 一个列表,内容为hahaha,wahaha,qqxing # findall总是优先显示分组()中的内容 res = re.findall('>(?:\w+)<', ret) # ?:表示取消这个分组优先,正常显示 ret = re.search(r'<(?P<tab1>\w+)>(?P<content>\w+)<\\(\w+)>', '<title>qqxing<\\title>') # ?P表示对分组起名 ret = re.search(r'<(?P<tab1>\w+)>(?P<content>\w+)</(?P=tab1)>', '<title>qqxing</title>') # (?P=tab1) 直接在这里引用这个分组 ret = re.search(r'<(\w+)>(\w+)<\\(\w+)>', '<title>qqxing<\\title>') print(ret.group()) # <title>qqxing<\title> print(ret.group(1)) # title print(ret.group(2)) # qqxing print(ret.group(3)) # \title