Python标准库re:正则表达式(二)
本文作者:高金凤
文字编辑:胡 婧
技术总编:刘洪儒
有问题,不要怕!点击推文底部“阅读原文”下载爬虫俱乐部用户问题登记表并按要求填写后发送至邮箱statatraining@163.com,我们会及时为您解答哟~
爬虫俱乐部的github主站正式上线了!我们的网站地址是:https://stata-club.github.io,粉丝们可以通过该网站访问过去的推文哟~
好消息:爬虫俱乐部隆重推出数据定制及处理业务啦,您有任何网页数据获取及处理方面的难题,请发邮件至我们邮箱statatraining@163.com,届时会有俱乐部高级会员为您排忧解难!
诸君安,往期推文《Python标准库re:正则表达式》我们给大家介绍了Python的re模块中3个字符串的匹配函数:match、search和findall。今天我们继续为大家介绍re模块中修改字符串的一些函数,分别是split、sub和subn,他们具体如何使用呢?一起往下看:
01
split
功能:分割符合正则表达式的字符串,产生一个列表。
语法如下所示:
re.split(pattern, string),其中,参数pattern:是一个正则表达式;参数string:表示要被分割的字符串。
我们先举个小例子,看看这个函数的基本用法。首先,我们导入re库并定义一个字符串str:
import re
str='stata club'
假如我们想要按照空格分割字符串str,就可以执行如下命令:
print(re.split(r" ",str))
得到结果:
我们发现,显示结果中将字符串str按照空格分成了2个单词stata和club。
02
sub函数
功能:替换符合正则表达式的字符串。
语法如下所示:
re.sub(pattern, repl, string, count=0, flags=0),其中,参数pattern : 一个正则表达式;参数repl:替换的字符串,也可为一个函数;参数string:要被查找替换的原始字符串;参数count : 模式匹配后替换的最大次数,默认 0 表示替换所有的匹配。
如果我们想要替换字符串str中club为very good,就可以执行如下命令:
print(re.sub("club","very good",str))
得到结果:
03
subn函数
功能:与sub函数一样,是用来替换符合正则表达式的字符串
语法如下所示:
re.subn(pattern, repl, string[, count]),每一个参数的含义同上,只不过这个函数的返回结果列表中显示了被替换的次数。
同样是上面的例子:
print(re.subn("club","very good",str))
结果如下:
可以看到:subn函数返回被替换的次数是1次。
学习了这三个函数的基本区别,我们来看看这三个函数与正则表达式中一些元字符的搭配使用:
01
spit函数
str1 = "hello,wuhan;hello?zhongnan"
我们发现字符串str1中有多个单一的分割符,如果我们想同时按照这些分割符切分字符串str1,可以进行如下操作:
print(re.split(r",|;|\?",str1)) #?是一个元字符,需要加\进行转义
得到结果:
当然,我们还可以用“[]”代替“||”,如下所示:
print re.split(r"[;,?]",str1) #这里可以不对“?”进行转义
同样也可以得到相同的结果:
除此之外,我们发现以上分隔符都是一些非字母数字下划线的符号,所以还可以用元字符“\W”来解决这个问题,如下所示:
print(re.split(r"\W",str1))
得到结果:
我们发现上述结果中原来的分隔符都自动去掉了,如果我们想保留分隔符,可以用小括号将“\W”括起来,如下所示:
print(re.split(r"(\W)",str1))
得到结果:
02
sub函数
str2 = "hello 111 wuhan 222 hello 333 zhongnan"
如果我们相将字符串中连续的数字替换为“X”,就可以执行如下命令:
print(re.sub("\d+","X",str2))
得到结果:
当然,如果你不想对所有的数字做替换,只想替换2次,就可以设置count,如下所示:
print(re.sub("\d+","X",str2,2))
得到结果:
发现只有前两个连续的数字组合被替换成了“X”。
03
subn函数
subn函数的功能和sub函数是完全一样的,唯一的区别是结果中显示了符合条件的字符串被替换的次数,我们还是用上面的例子做一个展示:
print(re.subn("\d+","X",str2))
得到结果:
可以看到返回了连续数字被替换的次数是3次。
以上就是我们今天介绍的3个字符串函数与正则表达式搭配使用的方法以及它们的用法区别,当然实际问题的处理远不止于此,在今后的推文中我们会相继介绍其他相关内容,期待与大家一起交流学习哟~
对爬虫俱乐部的推文累计打赏超过1000元我们即可给您开具发票,发票类别为“咨询费”,目前第五批发票已经寄到各位读者的手中。用心做事,只为做您更贴心的小爬虫!
往期推文推荐:
关于我们
微信公众号“爬虫俱乐部”分享实用的stata命令,欢迎转载、打赏。爬虫俱乐部是由李春涛教授领导下的研究生及本科生组成的大数据分析和数据挖掘团队。
此外,欢迎大家踊跃投稿,介绍一些关于stata的数据处理和分析技巧。
投稿邮箱:statatraining@163.com
投稿要求:
1)必须原创,禁止抄袭;
2)必须准确,详细,有例子,有截图;
注意事项:
1)所有投稿都会经过本公众号运营团队成员的审核,审核通过才可录用,一经录用,会在该推文里为作者署名,并有赏金分成。
2)邮件请注明投稿,邮件名称为“投稿+推文名称”。
3)应广大读者要求,现开通有偿问答服务,如果大家遇到关于stata分析数据的问题,可以在公众号中提出,只需支付少量赏金,我们会在后期的推文里给予解答。