2018.10.19PYTHON-31正则和

RE使用的大致步骤¶
1.使用compile将表示正则的字符串编译为一个pattern对象 2.通过pattern对象提供一系列方法对文本进行查找匹配,获得匹配结果,一个Match对象

最后使用match对象提供的属性和方法获得信息,根据需要进行操作
RE常用函数
group():获得一个或者多个分组匹配的字符串,当要获得整个匹配子串时,直接使用group或者group(0)
start:获取分组匹配的字符串在整个字符串中的起始位置,默认参数为0
end:获取分组匹配的字符串在整个字符串中的结束位置,默认参数为0
span:返回的结构技术(start(group),end(group)

#导入相关包
import re
#查找数字
#r表示字符串不转义
p =re.compile(r'\d+')
#在字符串"one12two3three4four"中进行查找,按照规则p制定的正则进行查找
#返回结果是NONE表示没有找到,否则会返回match对象
#参数3,6表示在字符串中查找的范围
m =p.match("one12two3three4four",3,20)

print(m)
#上述代码说明的问题
#1.match可以输入参数表示起始位置
#2.找到的结果只包含一个,表示第一次进行匹配成功的内容
print(m[0])
print(m.start(0))
print(m.end(0))
import re
#I表示忽略大小写
p = re.compile(r'([a-z]+) ([a-z]+)',re.I)

m = p.match("I am really love you")
print(m)
print(m.group(0))
print(m.start(0))
print(m.end(0))
print(m.group(1))
print(m.start(1))
print(m.end(1))
print(m.groups())

查找
search(str,[, pos[, endpos]]):在字符串中查找匹配. pos 和 endpos表示起始位置
findall:查找所有
finditer:查找,返回一个iter结果

import re

p= re.compile(r'\d+')

m = p.search("sdjlsdfsdffjsdklfjsdklfjsd1232132131432452345")

print(m.group())
rst = p.findall("s678ffjsdjsd1232132dsfsd13143sdfdsf2452345")

print(rst)

sub替换

sub(rep1,str[,count]

#sub替换的案例
import re
p = re.compile(r'(\w+) (\w+)')
s = "hello 123 wang 456 xiaojing ,I love you"

rst = p.sub(r'Hello world',s)

print(rst)

匹配中文

大部分中文内容表示范围是[u4e00-u9fa5],不包括全角标点

import re

title = u'世界你好, helo world'
p = re.compile(r'[\u4e00-\u9fa5]+')

rst = p.findall(title)
print(rst)

贪婪和非贪婪

贪婪:尽可能多的匹配,(*)表示贪婪匹配
非贪婪:找到符合条件的最小内容即可,(?)表示非贪婪
正则默认使用贪婪匹配

import re

title= u'<div>name</div><div>age</div>'

p1= re.compile(r'<div>.*</div>')
p2= re.compile(r'<div>.*?</div>')

m1 = p1.search(title)
print(m1.group())

m2 = p2 .search(title)
print(m2.group())

猜你喜欢

转载自blog.csdn.net/weixin_42879237/article/details/83189374
今日推荐