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

 

posted @ 2019-03-22 14:58  msKk1  Views(113)  Comments(0Edit  收藏  举报