p113-
re模块
-
re.split()
import re result = re.split('\d+','asdf456iuiu') print(result) #['asdf', 'iuiu'] result = re.split('(\d+)','asdf456iuiu') print(result) #['asdf', '4564', 'iuiu'] 把用来分割的数字也保留了,字符串里的分割就没保留,因为字符串已经知道按照什么分割,这里是用正则表达式分割 result = re.split('\d(\d)\d','asdf456iuiu') print(result) #['asdf', '5', 'iuiu'] 只保留了中间的数字5
-
re.sub()
result = re.sub('\d+','A','aaa123bbb455ccc') print(result) # aaaAbbbAccc 把所有数字串都替换成大写A result = re.sub('\d+','A','aaa123bbb455ccc',1) print(result) # aaaAbbb455ccc 只替换第一个遇到的数字串
-
re.subn()
result = re.subn('\d+','A','aaa123bbb455ccc') print(result) # ('aaaAbbbAccc', 2) 全部替换 然后提示替换次数
-
re.match()
result = re.match('\d+','aaa123bbb455ccc') print(result) #None result = re.match('\d+','000aaa123bbb455ccc') print(result) #<re.Match object; span=(0, 3), match='000'> match 从头匹配 #相当于 result = re.search('^\d+','000aaa123bbb455ccc') print(result) #<re.Match object; span=(0, 3), match='000'>
-
match 和 search
- match : 规定这个字符串必须是什么样的
- search :用来寻找字符串中是否含有满足条件的子内容
-
re.compile()
-
对同一个正则表达式解析,节省时间
-
ret1 = re.compile('\d+') res1 = ret1.search('asdf3423sdf') res2 = ret1.findall('asdf3423sdf') print(res1) #<re.Match object; span=(4, 8), match='3423'> print(res2) #['3423']
-
-
re.finditer()
-
ret = re.finditer('\d+','asdf23423gfgdfg45654') for i in ret: print(i.group()) # 返回两行 数字 节省空间
-
-
即节省空间,又节省时间 先 compile 再 finditer
ret1 = re.compile('\d+')
ret2 = ret1.finditer('asdf23423gfgdfg45654')
for i in ret2:
print(i.group())
- 分组命名 (?P<名字>正则表达式)
ret = re.search('\d\w+?\d(\d)(?P<aaa>\w+)','2115sssdf@#4fds544fssssdf21_2234')# 加问号 尽可能少,至少1个
print(ret.group('aaa')) # sssdf
html = '<ul><li>aaa</li><li>bbb</li><li>ccc</li></ul> <ol></ol><ul></ul>'
regex = '<(?P<tag>\w+)>.*?</(?P=tag)>' #从文本头开始,把遇到的第一个标签里的内容取出来 标签首尾呼应
ret = re.search(regex,html)
print(ret.group())
html = 'class="my_class"><ul><li>aaa</li><li>bbb</li><li>ccc</li></ul> <ol></ol><ul></ul>'
regex = '<(?P<tag>\w+)>.*?</(?P=tag)>' #从文本头开始,把遇到的第一个标签里的内容取出来 标签首尾呼应
ret = re.search(regex,html)
print(ret.group()) #<ul><li>aaa</li><li>bbb</li><li>ccc</li></ul>
html = 'class="my_class"><ul><li>aaa</li><li>bbb</li><li>ccc</li></ul> <ol></ol><ul></ul>'
regex = r'<(\w+)>.*?</\1>' #r格式化字符串,\1代表第一个分组的名字
ret = re.search(regex,html)
print(ret.group()) #<ul><li>aaa</li><li>bbb</li><li>ccc</li></ul>
#匹配字符串中所有整数,其中有个40.35,是小数,可以先匹配出来 再删除
str1 = '1-2*(60+(-40.35/5)-(-4*3))'
regex = r'\d+\.\d+|(\d+)'
ret = re.findall(regex,str1)
ret2 = filter(lambda n:n,ret)
print(list(ret2)) #['1', '2', '60', '5', '4', '3']