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

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

在尝试更多地了解正则表达式的同时,一个教程建议您可以使用\b匹配一个词的边界。但是,Python解释器中的以下代码段不像预期的那样工作:

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

如果匹配的话,它应该是一个Match对象,但是它是None.

\bPython中不支持的表达式,还是我使用它的错误?


qq_花开花谢_0
浏览 1697回答 3
3回答

陪伴而非守候

你为什么不试试word&nbsp;=&nbsp;'two're.compile(r'\b%s\b'&nbsp;%&nbsp;word,&nbsp;re.I)产出:>>>&nbsp;word&nbsp;=&nbsp;'two'>>>&nbsp;k&nbsp;=&nbsp;re.compile(r'\b%s\b'&nbsp;%&nbsp;word,&nbsp;re.I)>>>&nbsp;x&nbsp;=&nbsp;'one&nbsp;two&nbsp;three'>>>&nbsp;y&nbsp;=&nbsp;k.search(&nbsp;x)>>>&nbsp;y<_sre.SRE_Match&nbsp;object&nbsp;at&nbsp;0x100418850>还忘了提到,您应该在代码中使用原始字符串。>>>&nbsp;x&nbsp;=&nbsp;'one&nbsp;two&nbsp;three'>>>&nbsp;y&nbsp;=&nbsp;re.search(r"\btwo\b",&nbsp;x)>>>&nbsp;y<_sre.SRE_Match&nbsp;object&nbsp;at&nbsp;0x100418a58>>>>

凤凰求蛊

这将起作用:re.search(r"\btwo\b", x)当你写"\b"在Python中,它只有一个字符:"\x08"..要么像这样避开反斜杠:"\\b"或者编写如下原始字符串:r"\b"

青春有我

只是为了明确地解释为什么&nbsp;re.search("\btwo\b", x)不起作用,是因为\b在Python中,字符串是Backspace字符的缩写。print("foo\bbar")fobar所以模式"\btwo\b"正在寻找一个后置空间,然后是two,后面是另一个后台空间,您在其中搜索的字符串(x = 'one two three')没有。允许re.search(或compile)解释序列\b作为一个单词边界,可以避开反斜杠("\\btwo\\b")或使用原始字符串创建模式(r"\btwo\b").
打开App,查看更多内容
随时随地看视频慕课网APP