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

Python re模块中的正则表达式是否支持单词边界(\b)?,python,regex,word-boundaries,Python,Regex,Word Boundaries,在尝试学习更多关于正则表达式的知识时,一个教程建议您可以使用\b匹配单词边界。但是,Python解释器中的以下代码段无法按预期工作: >>> x = 'one two three' >>> y = re.search("\btwo\b", x) 如果有匹配的对象,它应该是匹配对象,但它是None Python不支持\b表达式,还是我用错了?为什么不试试 word = 'two' re.compile(r'\b%s\b' % word, re.I) 输出:

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

>>> x = 'one two three'
>>> y = re.search("\btwo\b", x)
如果有匹配的对象,它应该是匹配对象,但它是
None

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

为什么不试试

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>
word='two' >>>k=re.compile(r'\b%s\b'%word,re.I) >>>x=‘一二三’ >>>y=k.搜索(x) >>>y 还忘了提到,你在你的代码中

>>> x = 'one two three'
>>> y = re.search(r"\btwo\b", x)
>>> y
<_sre.SRE_Match object at 0x100418a58>
>>> 
x='一两三' >>>y=重新搜索(r“\b两个\b”,x) >>>y >>>
这将起作用:
重新搜索(r“\b两个\b”,x)

用Python编写
“\b”
时,它是一个字符:
“\x08”
。或者像这样避开反斜杠:

"\\b"
r"\b"
或者像这样写一个原始字符串:

"\\b"
r"\b"

Python文档

\b

匹配空字符串,但仅在单词的开头或结尾处匹配。单词定义为字母数字或下划线字符序列,因此单词的结尾由空格或非字母数字、非下划线字符表示。请注意,形式上,\b定义为\w和\w字符之间的边界(反之亦然),或\w和字符串的开头/结尾之间的边界,因此被视为字母数字的精确字符集取决于UNICODE和区域设置标志的值。例如,r'\bfoo\b'匹配'foo','foo','(foo)','bar foo baz',但不匹配'foobar'或'foo3'。在字符范围内,\b表示退格字符,以便与Python的字符串文字兼容


为了明确解释为什么
re.search(“\btwo\b”,x)
不起作用,这是因为Python字符串中的
\b
是退格字符的缩写

print("foo\bbar")
fobar
因此,模式
“\b两个\b”
正在查找一个退格,后面是
2
,后面是另一个退格,您在其中搜索的字符串(
x='一两三'
)没有退格


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

这将起作用:
re.search(r”\btwo\b“,x)
为什么不使用“原始”字符串
r“\b两个\b”
?人们都在谈论
\b
。是的,Python是这样做的,您只需要原始字符串
r'\b'
就可以对字符进行转义。(或者双倍转义它
\\b
,这是yukky)很有趣,谢谢您的示例。你知道我选择的方法为什么不起作用吗?这两种方法应该是相同的,只是在你的方法中你只编译了一次。@darren:看我的上一个例子,它只是改进了你所做的。我提供了原始字符串进行搜索。啊,根据你和博洛的建议,这是因为我没有使用原始字符串。谢谢-1:向后。原始字符串应该是第一个。用字符串
%
替换构建重新表达式的另一项工作是一个糟糕的切线,与这个特定问题无关。糟糕的答案。代码是有效的,但是没有任何解释。这真的帮助了我。。。我正在努力使用类似pyspark的正则表达式,但无法理解\b(单词边界)不起作用的原因。谢谢,汉克斯,我也被这个抓住了。但是为什么
\d
在没有原始字符串的情况下可以正常工作,而
\b
却不能?