码迷,mamicode.com
首页 > 其他好文 > 详细

re模块

时间:2018-08-07 21:27:39      阅读:142      评论:0      收藏:0      [点我收藏+]

标签:编译   优先   compile   方向   fas   pil   pat   自动化   对象   


常用的方法 findall / search / match / compile / finditer sub subn split

import re

findall, search, match
re.match只匹配字符串的开始,如果字符串开始不符合正则表达式,则匹配失败,函数返回None;而re.search匹配整个字符串,直到找到一个匹配。

s = ‘a123asd456‘

#re.findall()  返回一个列表,里面含有没一个匹配的元素
res1 = re.findall(‘\d‘,s)
print(res1)

re.search() 返回一个对象,需要group()配合,返回第一个匹配的元素
res2 = re.search(‘\d‘,s)
print(‘search:‘ + res2.group())

re.match()  跟 search 一样,但是如果第一个要匹配的元素的话,会报错,只能在字符串开头处进行匹配
res3 = re.match(‘\d‘,s)
print(‘match:‘+res3.group())


sub 检索和替换匹配项, subn 替换匹配项(几次), split 分割字符串(几次)

s = r‘水电费123fffffasad,.,.,;[]\\/dad‘

res4 = re.sub(‘\d‘,‘x‘,s)  # 把所有匹配项都替换为‘x‘ 并返回一个字符串
print(res4)

res5 = re.subn(‘\d‘,‘x‘,s) # 把所有匹配项都替换为‘x‘ 并返回一个含有 已替换的字符串和替换次数
print(res5)

res6 = re.split(‘\d‘,s,)  # 把匹配项作为分割符,分割字符串,并可以在最后添加次数参数,可以分割按需分割几次,如果有分组,分组优先,保留分组
print(res6)

进阶方法: conpile finditer
compile 爬虫,自动化方向: 预编译,提高时间效率
compile 函数用于编译正则表达式,生成一个正则表达式( Pattern )对象,供 match() 和 search() 这两个函数使用

s = r‘水电费123fff-222ffasa-29d,.,.,;[]\\/dad‘
com = re.compile(‘-0\.\d+|-[1-9]\d+(\.\d+)?‘)
res = com.search(s).group()
print(res)

finditer 空间效率

print(re.findall(‘\d‘,‘sjkhkdy982ufejwsh02yu93jfpwcmc‘))
    # [‘9‘, ‘8‘, ‘2‘, ‘0‘, ‘2‘, ‘9‘, ‘3‘]
ret = re.finditer(‘\d‘,‘sjkhkdy982ufejwsh02yu93jfpwcmc‘)
for r in ret:
    print(r.group())
    # 9
    # 8
    # 2
    # 0
    # 2
    # 9
    # 3

分组()  分组优先

分组遇见search
ret = re.search(‘\d+(.\d+)(.\d+)(.\d+)?‘,‘1.2.3.4-2*(60+(-40.35/5)-(-4*3))‘)
print(ret.group())
print(ret.group(1))
print(ret.group(2))
print(ret.group(3))


ret = re.findall(‘>(\w+)<‘,r‘<a>wahaha<\a>‘)
print(ret)

ret = re.search(r‘<(\w+)>(\w+)</(\w+)>‘,r‘<a>wahaha</b>‘)
print(ret.group())
print(ret.group(1))
print(ret.group(2))


分组命名
ret = re.search("<(?P<name>\w+)>\w+</(?P=name)>","<h1>hello</h1>")
print(ret.group(‘name‘))  #结果 :h1
# print(ret.group())  #结果 :<h1>hello</h1>

ret = re.search(r"<(\w+)>\w+</\1>","<h1>hello</h1>")
print(ret.group(1))
# print(ret.group())  #结果 :<h1>hello</h1>

ret = re.search(r‘<(?P<tag>\w+)>(?P<c>\w+)</(\w+)>‘,r‘<a>wahaha</b>‘)
print(ret.group())
print(ret.group(‘tag‘))
print(ret.group(‘c‘))

 

re模块

标签:编译   优先   compile   方向   fas   pil   pat   自动化   对象   

原文地址:https://www.cnblogs.com/niuli1987/p/9439430.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!