虽然试图学习更多关于正则表达式的知识,但教程建议您可以使用\ b来匹配单词边界。然而,由于预计在Python解释器下面的代码片段不起作用:Python重新模块支持单词边界( b)吗?
>>> x = 'one two three'
>>> y = re.search("\btwo\b", x)
Ÿ应该有一个匹配对象,如果什么是匹配的,但它是无。 \ b表达式在Python中是不支持的还是我用它错了?
感谢您的任何帮助。
虽然试图学习更多关于正则表达式的知识,但教程建议您可以使用\ b来匹配单词边界。然而,由于预计在Python解释器下面的代码片段不起作用:Python重新模块支持单词边界( b)吗?
>>> x = 'one two three'
>>> y = re.search("\btwo\b", x)
Ÿ应该有一个匹配对象,如果什么是匹配的,但它是无。 \ b表达式在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>
也忘了提,你应该在你的代码中使用原始字符串
>>> x = 'one two three'
>>> y = re.search(r"\btwo\b", x)
>>> y
<_sre.SRE_Match object at 0x100418a58>
>>>
有趣的是,感谢您的工作示例。你有什么洞察力,为什么我选择的方法不起作用?这两种方法应该是一样的,只是在你的方法中你只编译一次。 – 2010-10-22 08:42:54
@darren:看到我的最后一个例子,它改进了你的工作。我提供了原始字符串进行搜索。 – pyfunc 2010-10-22 08:44:59
ahh在你和Bolo的建议后,这是因为我没有使用原始字符串。谢谢! – 2010-10-22 08:46:42
这将工作:re.search(r"\btwo\b", x)
当您在Python中编写"\b"
时,它是单个字符:"\x08"
。要么逃避这样的反斜线:
"\\b"
或写入原始字符串是这样的:
r"\b"
这真的帮助了我......我正在用pyspark rlike正则表达式挣扎,并且无法弄清楚为什么\ b(字边界)不起作用。谢谢 – jb1t 2016-06-17 23:09:14
Python文档
https://docs.python.org/2/library/re.html#regular-expression-syntax
\ b
匹配空字符串,但仅限于单词的开头或结尾。一个单词被定义为一个字母数字或下划线字符序列,因此单词的末尾用空格或非字母数字,非下划线字符表示。请注意,在形式上,\ b被定义为\ w和\ w字符之间的边界(反之亦然),或\ w和字符串的开始/结尾之间的边界,所以被认为是字母数字的精确字符集取决于在UNICODE和LOCALE标志的值上。例如,r'\ bfoo \ b'匹配'foo','foo。','(foo)','bar foo baz',但不匹配'foobar'或'foo3'。在字符范围内,\ b代表退格字符,以便与Python的字符串文字兼容。
这将工作:'re.search(r“\ btwo \ b”,x)' – Bolo 2010-10-22 08:39:13
为什么不使用“原始”字符串? 'R “\ btwo \ B”'? – 2010-10-22 10:56:13
关于'\ b的人们[经常感到困惑](http://stackoverflow.com/questions/4213800/is-there-something-like-a-counter-variable-in-regular-expression-replace/4214173#4214173) '。 – tchrist 2010-11-18 13:55:08