专栏首页Crossin的编程教室【Python 第56课】 正则表达式(2)

【Python 第56课】 正则表达式(2)

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

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

面向零基础初学者的编程课

每天5分钟,轻松学编程

回复『 p 』查看python课程

回复『 g 』查看pygame课程

回复『 t 』查看习题

回复『 w 』查看其他文章

本文分享自微信公众号 - Crossin的编程教室(crossincode)

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2013-09-17

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 分享一个强大的英汉词典开源数据库

    之前我们通过程序整理过一份 Python 及编程相关的英语高频词汇表:我们用程序整理出了一份Python英语高频词汇表,拿走不谢!(回复 单词 查看代码及单词本...

    Crossin先生
  • #PY小贴士# 文本编解码时的errors参数

    打开文件的open方法和对字符编码解码的encode/decode,它们都有一个同样的可选参数 errors。这个参数很有用处。

    Crossin先生
  • #PY小贴士# 判断输入内容的合法性

    当我们通过 input 方法或者网页提交的 form 获取到用户的输入时,往往都要对输入值做一番验证。用户的输入是“不可靠”的,你不知道用户因为手滑、理解错误或...

    Crossin先生
  • yii2代码学习-BaseYii

    yii框架的v-2.0-alpha版本已经发布,PHP版本最低要求是PHP-5.4,将会在今年早些时候推出正式版。阅读yii2的代码,能学到很多东西,代码写的很...

    luxixing
  • 通过 imagick 让 PHP 生成 PSD 文件缩略图

    第一步、安装ImageMagick   首先需要安装 ImageMagick ,因为 imagick 是一个可以供 PHP 调用 ImageMagick 功能的...

    胡尐睿丶
  • 一次生产环境mysql迁移操作(二)mysql空间释放(碎片整理)

    上文中增加了定时归档,现在一些大表磁盘空间一直不释放,导致数据库文件越来越大。现在介绍下数据导入导出方案。

    一笠风雨任生平
  • 转--Go时间格式化和类型互换操作

    获取本地时间 // get current timestamp currentTime := time.Now().Local() //p...

    李海彬
  • 流氓会武功 | 这款勒索软件不仅能勒索,还能DDoS

    一款名为 FireCrypt 的勒索软件正悄然来袭。它不仅具备一般勒索软件的特性,会将受感染的系统文件恶意加密。还会试图利用受感染者机器,向其源码中硬编码的 U...

    FB客服
  • Java主流Web Service框架介绍:CXF和Axis2

    CXF和Axis2是目前java平台上最主流的两个框架,虽然两个项目都隶属ASF,但却是基于不同思想和风格实现的,因此也各有所长。   CXF:http://c...

    庞小明
  • Python中计时,看这一篇就够了

    本文讨论了Python 2和python 3中计时方法,并完成了一个通用的计时装饰器。

    py3study

扫码关注云+社区

领取腾讯云代金券