自学Python教程【第五十四节】 正则表达式(2)

欢迎大家来到Python教程教室,上节课我们简单认识了一下Python正则表达式,这节课我们继续了解Python正则表达式的相关内容,并为大家解决上节课中的部分疑问,比如r代表什么,来一起学习吧:

有同学问起昨天那段测试代码里的问题,我来简单说一下。

1.

r”hi”

这里字符串前面加了r,是raw的意思,它表示对字符串不进行转义。为什么要加这个?你可以试试print “\bhi”和r”\bhi”的区别。

>>> print "\bhi" 
hi
>>> print r"\bhi"
\bhi

可以看到,不加r的话,\b就没有了。因为Python的字符串碰到“\”就会转义它后面的字符。如果你想在字符串里打“\”,则必须要打“\\”。

>>> print "\\bhi" 
\bhi

这样的话,我们的正则表达式里就会多出很多“\”,让本来就已经复杂的字符串混乱得像五仁月饼一般。但加上了“r”,就表示不要去转义字符串中的任何字符,保持它的原样。

2.

re.findall(r"hi", text)

re是Python里的正则表达式模块。findall是其中一个方法,用来按照提供的正则表达式,去匹配文本中的所有符合条件的字符串。返回结果是一个包含所有匹配的list。

3.

今天主要说两个符号“.”和“*”,顺带说下“\S”和“?”。

“.”在正则表达式中表示除换行符以外的任意字符。在上节课提供的那段例子文本中:

Hi, I am Shirley Hilton. I am his wife.

如果我们用“i.”去匹配,就会得到

['i,', 'ir', 'il', 'is', 'if']

你若是暴力一点,也可以直接用“.”去匹配,看看会得到什么。

与“.”类似的一个符号是“\S”,它表示的是不是空白符的任意字符。注意是大写字符S。

4.

在很多搜索中,会用“?”表示任意一个字符,“*”表示任意数量连续字符,这种被称为通配符。但在正则表达式中,任意字符是用“.”表示,而“*”则不是表示字符,而是表示数量:它表示前面的字符可以重复任意多次(包括0次),只要满足这样的条件,都会被表达式匹配上。

结合前面的“.*”,用“I.*e”去匹配,想一下会得到什么结果?

['I am Shirley Hilton. I am his wife']

是不是跟你想的有些不一样?也许你会以为是

['I am Shirle', 'I am his wife']

这是因为“*”在匹配时,会匹配尽可能长的结果。如果你想让他匹配到最短的就停止,需要用“.*?”。如“I.*?e”,就会得到第二种结果。这种匹配方式被称为懒惰匹配,而原本尽可能长的方式被称为贪婪匹配。

最后留一道习题:

从下面一段文本中,匹配出所有s开头,e结尾的单词。

site sea sue sweet see case sse ssee loses.

恭喜你在Python自学的道路上又坚持了一天,今天我们继续了解了Python中的相关内容,是否对“.”“*””\S””r””?”这些感到晕头转向呢?将我们的每节课中的每一个案例都进行实际操作练习,还可以再找些其他练习进行实践操作,你就会理解、掌握他们哦,更多相关内容,我们下节继续分享。

好啦,今天的分享到这里就结束了,希望大家能够持续关注马哥教育官网,每天都会有大量优质内容与大家分享!

声明:文章来源于网络,侵删!

相关新闻

历经多年发展,已成为国内好评如潮的Linux云计算运维、SRE、Devops、网络安全、云原生、Go、Python开发专业人才培训机构!