首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >re模块中的正则表达式是否支持单词边界(\b)?

re模块中的正则表达式是否支持单词边界(\b)?
EN

Stack Overflow用户
提问于 2010-10-22 16:21:37
回答 3查看 65.2K关注 0票数 113

在尝试学习更多关于正则表达式的知识时,有一篇教程建议您可以使用\b来匹配单词边界。但是,Python解释器中的以下代码片段无法按预期工作:

>>> x = 'one two three'
>>> y = re.search("\btwo\b", x)

如果匹配了任何内容,它应该是一个match对象,但它是None

\b表达式在Python中不受支持,还是我用错了?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2010-10-22 16:24:58

你在你的代码中should be using raw strings

>>> x = 'one two three'
>>> y = re.search(r"\btwo\b", x)
>>> y
<_sre.SRE_Match object at 0x100418a58>
>>> 

还有,你为什么不试试

word = 'two'
re.compile(r'\b%s\b' % word, re.I)

输出:

>>> word = 'two'
>>> k = re.compile(r'\b%s\b' % word, re.I)
>>> x = 'one two three'
>>> y = k.search( x)
>>> y
<_sre.SRE_Match object at 0x100418850>
票数 100
EN

Stack Overflow用户

发布于 2010-10-22 16:49:33

这将会起作用:re.search(r"\btwo\b", x)

在Python语言中编写"\b"时,只有一个字符:"\x08"。可以像这样转义反斜杠:

"\\b"

或者像这样编写一个原始字符串:

r"\b"
票数 98
EN

Stack Overflow用户

发布于 2018-08-15 00:09:55

只是为了明确解释为什么re.search("\btwo\b", x)不能工作,这是因为Python字符串中的\b是退格符的缩写。

print("foo\bbar")
fobar

因此,模式"\btwo\b"将查找一个退格符,然后是two,然后是另一个退格符,而您正在搜索的字符串(x = 'one two three')中没有这个退格符。

要允许re.search (或compile)将序列\b解释为单词边界,可以转义反斜杠("\\btwo\\b")或使用原始字符串创建模式(r"\btwo\b")。

票数 21
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3995034

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档