Python重新模块支持字边界(\ b)吗?

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

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

如果有什么匹配的话,y应该是一个匹配对象,但它是None。 \ bexpression式在Python中不被支持,或者我使用错了吗?

感谢您的帮助。

你为什么不尝试

 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> 

也忘了提到,你应该在你的代码中使用原始string

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

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

当你用Python编写"\b"时,它是一个单独的字符: "\x08" 。 要么像这样逃避反斜线:

 "\\b" 

或者像这样写一个原始的string:

 r"\b" 

Python文档

https://docs.python.org/2/library/re.html#regular-expression-syntax

\ b

匹配空string,但只在一个字的开头或结尾。 单词被定义为一个字母数字或下划线字符序列,所以单词的末尾用空格或非字母数字,非下划线字符表示。 请注意,在forms上,\ b被定义为\ w和\ w字符(反之亦然)之间的边界,或\ w和string的开始/结尾之间的边界,所以被认为是字母数字的精确字符集取决于在UNICODE和LOCALE标志的值上。 例如,r'\ bfoo \ b'匹配'foo','foo。','(foo)','bar foo baz',但不匹配'foobar'或'foo3'。 在字符范围内,\ b代表退格字符,与Python的string文字兼容。