RE使用大致步骤
1.使用compile将表示正则的字符串编译为一个pattern对象
2.通过pattern对象提供一系列方法对文本进行查找匹配,找到匹配结果,一个Match对象3.
3.最后使用Match对象提供的属性和方法获取信息,根据需要进行操作
Re常用函数
-
group():获得一个或多个分组匹配的字符串,当要获取整个匹配的子串时,直接使用group或者group(0)
-
start:获取分组匹配的子串在整个字符串中的起始位置,参数默认为0
-
end:获取分组匹配的子串在整个字符串的结束位置,默认为0
-
span:返回的结构技术(start(group),end(group))
#导入相关包 import re #查找数字 #r表示字符串不转义 p = re.compile(r'\d+') #在字符串"one12towthree33456four78"中进行查找,按照规划p制定的正则进行查找 #返回结果是None表示没有找到,否则会返回match对象 #参数3,26表示在字符串中查找范围 m = p.match("one12towthree33456four78",3,26) print(m) print(m.start(0)) print(m.end(0))
#上述代码说明的问题
-
1.match可以输入参数表示起始范围
-
2.查找到结果只包含一个,表示第一次进行匹配成功的内容
import re # 1表示忽略大小写 p = re.compile(r'([a-z]+) ([a-z]+)',re.1) m = p.match("I am really like mingyue") 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:查找所有
-
赴内地特然:查找,返回一个iter结果
import re p = re.compile(r'\d+' m = p.search("one12two34three567four") print(m.group()) rst = p.findall("one12two34three567four") print(type(rst)) print(rst)
sub替换
-
sub(rep1,str[,count])
import re p = re.compile(r'(\w+) (\w+)’) s = "hello 123 liu 456 mingyue, i love you" rst = p.sub(r'hello world',s) print(rst)
匹配中文
-
大部分中文内容表示范围是[u4e00-u9fa5],不包括全角标点
import re title = u'世界 你好, hello moto' p = re.compile(ur'[\u4e00-\u9fa5]+') rst = p.findall(title) print(rst)
贪婪和非贪婪
- 贪婪:尽可能多的匹配, (*)表示贪婪匹配
- 非贪婪:找到符合条件的最小内容即可,(?)表示非贪婪
- 正则默认使用贪婪匹配