正则匹配以xx开头以xx结尾的单词

在字符串处理中,正则表达式是一大利器,但其对于初学者而言是存在一定的难度的。
而如何匹配以xx开头以xx结尾的单词呢?

假设需要匹配的字符串为:site sea sue sweet see case sse ssee loses
需要匹配的为以s开头以e 结尾的单词。
正确的正则式为:\bs\S*?e\b

无论什么语言的正则的格式都一样,下面以python为例来进行代码演示:
解释一下:在python中re.findall函数表示匹配字符串中所有的可能选项,findall()里面第一个r表示row,忽略正则式中所有的转义。

text ='site sea sue sweet see case sse ssee loses'
re.findall(r'\bs\S*?e\b',text)

结果为:['site', 'sue', 'see', 'sse', 'ssee']

下面来解释一下:\b 代表单词的开始或结束,常由标点符号、空格、换行等来作为分隔符
如果前后不加\b,即正则表达式为:s\S*?e
运行结果就变成了
['site', 'se', 'sue', 'swe', 'se', 'se', 'sse', 'sse', 'se']
这样匹配出来的就是不保证单词的完整性,只要某一个单词中含有s*e都会输出来。

\S表示任意非空字符,在这个问题中很容易想到的正则表达式是\bs.*?e\b ,即将\S 写成.,但是这就会导致另外一种情况,这种情况的输出为:

['site', 'sea sue', 'sweet see', 'sse', 'ssee']

可以看见出现了sea sue 等不是我们所期望的情况出现。

而至于* 自然是表示匹配任意多个字符。
而使用\S*? 是为什么呢,为什么要加 呢?这就涉及到正则表达式的懒惰模式了。
如果使用.* 表示的就是贪婪模式,而.*? 表示的就是懒惰模式。
贪婪模式下会尽量匹配最长的字符串,而懒惰模式会尽量匹配最短的字符串。
举个栗子:
对于字符串abcgabc

贪婪模式– a.*c –得到的答案为:abcgabc
懒惰模式– a.*?c –得到的答案为:abc,abc

例子参考的是学习python的一个网站——Crossing的编程教室



欢迎大家加入QQ群一起交流讨论, 「吟游」程序人生——YinyouPoet

  • 23
    点赞
  • 57
    收藏
    觉得还不错? 一键收藏
  • 7
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值