ps:re.match() 与re.search()还有re.findall()区别
- re.match只匹配字符串的开始,
- re.search匹配整个字符串,返回第一个匹配结果,
- re.findall整个字符串,返回所有的匹配结果。
s = '__webrobot_processMsg({"robotId":"webbot","userId":"fbc2cbaf30014366badf143cc9cda4d4","sessionId":"0a5bc4ef69f64a609812ebf477d8b104","type":"openresp","body":{"status":1}});__webrobot_processMsg({"robotId":"webbot","userId":"fbc2cbaf30014366badf143cc9cda4d4","sessionId":"0a5bc4ef69f64a609812ebf477d8b104","type":"updaterobot","body":{"displayName":"小i机器人"}});__webrobot_processMsg({"robotId":"webbot","userId":"fbc2cbaf30014366badf143cc9cda4d4","sessionId":"0a5bc4ef69f64a609812ebf477d8b104","type":"ex","body":{"name":"initconfig","data":{"homeP4Path":"home/index.html","inputPrompt":"请在这里输入您的消息","helpP4Path":"http://www.xiaoi.com","messageDateFormat":"HH:mm:ss","speechAddr":"","dn":"小i机器人","speechEnabled":"false"}}});__webrobot_processMsg({"robotId":"webbot","userId":"fbc2cbaf30014366badf143cc9cda4d4","sessionId":"0a5bc4ef69f64a609812ebf477d8b104","type":"txt","body":{"fontStyle":0,"fontColor":0,"content":"Hi,我是小i机器人,我可以查天气,讲笑话,订机票哦~ 除此之外还有几十项实用好玩的功能哦~ 快来试试吧\\n\\r\\n","emoticons":{}}});__webrobot_processMsg({"robotId":"webbot","userId":"fbc2cbaf30014366badf143cc9cda4d4","sessionId":"0a5bc4ef69f64a609812ebf477d8b104","type":"txt","body":{"fontStyle":0,"fontColor":0,"content":"广东今天22℃~30℃ 多云转中到大雨 8-9级 20.8~24.4m/s\\r\\n适合穿T恤、短薄外套等夏季服装。\\r\\n","emoticons":{}}});'
1. complie()
- 编译正则表达式模式,返回一个对象模式。(可以把那些常用的正则表达式编译成正则表达式对象,这样做的目的为了提高一点效率)
- 格式:
re.complie(pattern,flags=0)
pattern:编译时用的表达式字符串
flags:编译标志位,用于修改正则表达式的匹配方式,如是否区分大小写,多行匹配等等。
2.match()
- 决定re是否在字符串的开始的位置进行匹配 注意:这个方法并不是完全匹配,当pattern结束时若string还有剩余字符,仍然视为匹配成功
想要完全匹配可以在表达式末尾添加边界匹配符“$” 语法: re.match(pattern,string,flags=0)
3.search()函数
- 语法:
- re.search(pattern,string,flags= 0)
re.search函数会在字符串中查找模式匹配,只要找到第一个匹配然后返回,若没有找到匹配则返回None
>> re.search(r'"content":"(.*?)\\r\\n",', s) # 若无结果 返回空, 有结果,只返回第一次匹配到的结果
<< re.Match object; span=(905, 976), match='"content":"Hi,我是小i机器人,我可以查天气,讲笑话,订机票哦~ 除此之外还有几十项实>
>> re.search(r'"content":"(.*?)\\r\\n",', s).group() # 输出结果带条件
<< '"content":"Hi,我是小i机器人,我可以查天气,讲笑话,订机票哦~ 除此之外还有几十项实用好玩的功能哦~ 快来试试吧\\n\\r\\n",'
>> re.search(r'"content":"(.*?)\\r\\n",', s).group(1) # 输出结果不带条件
<< 'Hi,我是小i机器人,我可以查天气,讲笑话,订机票哦~ 除此之外还有几十项实用好玩的功能哦~ 快来试试吧\\n'
4.findall()
- re.findall遍历匹配,可以获取字符串中所有匹配的字符串,返回一个列表
- 语法:
re.findall(pattern,string,flag=0)
>> re.findall(r'"content":"(.*?)\\r\\n",', s) # 若无结果 返回空列表 []
<< ['Hi,我是小i机器人,我可以查天气,讲笑话,订机票哦~ 除此之外还有几十项实用好玩的功能哦~ 快来试试吧\\n',
'广东今天22℃~30℃ 多云转中到大雨 8-9级 20.8~24.4m/s\\r\\n适合穿T恤、短薄外套等夏季服装。']
>> re.findall(r'"content":"(.*?)\\r\\n",', s) [1]
<< '广东今天22℃~30℃ 多云转中到大雨 8-9级 20.8~24.4m/s\\r\\n适合穿T恤、短薄外套等夏季服装。'
5.finditer()
- 搜索string,返回一个顺序访问每一个匹配结果(Match对象)的迭代器,找到RE匹配的所有子串,并把他们作为一个迭代器返回。
- 语法:
re.finditer(pattern,string,flags=0)
6.split()
-
按照能够匹配子串将string分割后返回列表
可以使用re.split来分割字符串。
语法:
re.split(pattern,string[,maxsplit])
maxsplit用于指定最大的分割次数,若不指定则全部分割。import re
#以数字分割字符串
print(re.split(’\d+’,‘one1two2123three323213four4five5’))
#执行结果如下:
#[‘one’, ‘two’, ‘three’, ‘four’, ‘five’, ‘’]
7.sub()
- 使用re替换string中每一个匹配的子串后返回替换后的新串。
- 语法:
- re.sub(pattern,repl,string,count)
参数一:要匹配的字符串,
参数二:要替换的字符串
参数三:要匹配的内容 参数四:指定替换的个数