我想将单词“c++”与 Python 3 中的单词边界匹配。但我的猜测是 \b 也会在加号上触发。
为了清楚起见,我已简化为以下测试用例:
\bc\+\+\b
我希望我可以保留单词边界,但以某种方式更改其设置。
原因是我想将正则表达式放在 TfidfVectorizer 中的 token_pattern 中,我无法控制它们如何使用它。
链接到在线正则表达式工具
影响角色类“行为”的方法非常有限 - 它们称为标志:
re.ASCII ... 重新详细
他们f.e.允许r'.'
匹配换行符 (re.DOTALL
),改变行为^$
(re.MULTILINE
)或使您的正则表达式匹配而不区分大小写(re.IGNORECASE
).
他们都没有改变\b
到没有'+'
在里面。如果你想搭配c++
对于 wordboundaries 你必须模仿\b
-您的行为模式:
\b Matches the empty string, but only at the beginning or end of a word.
A word is defined as a sequence of word characters. Note that formally,
\b is defined as the boundary between a \w and a \W character (or vice versa),
or between \w and the beginning/end of the string. This means that r'\bfoo\b'
matches 'foo', 'foo.', '(foo)', 'bar foo baz' but not 'foobar' or 'foo3'.
Source: https://docs.python.org/3/library/re.html#regular-expression-syntax
最简单的可能是将“c++”与前面的单词边界和后面的空格或非单词字符进行匹配。r'\bc\+\+[\s\W]'
但这也匹配'c+++'
。如果你想独家匹配'c++'
但不是'c+++'
你可能想放一个'\s'
进入您的模式并使用您允许的其他字符扩展它:
r'\b(c\+\+)[\s.,!?]'
扩展括号中的字符以容纳 c++ 之后允许的更多内容 - 将它们从分组 (c++) 中排除将需要它们匹配但不将它们包含到组中。
至于正则表达式测试工具,也许改为https://regex101.com/- 它有Python支持,你甚至可以save模式和测试文本并提供链接:
https://regex101.com/r/6XtVTS/1
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)