我正在尝试使用正则表达式完全找到整个单词但是我正在搜索的是来自用户输入的变量值。我试过这个:
regex = r"\b(?=\w)" + re.escape(user_input) + r"\b"
if re.match(regex, string_to_search[i], re.IGNORECASE):
<some code>...
但它匹配字符串的每次出现。它匹配“var” - &gt;“var”这是正确的但也匹配“var” - &gt;“var”iable我只希望它匹配“var” - &gt;“var”或“string” - &gt; “字符串”
输入:“剑”
String_to_search =“曾经有一个制造剑的剑士”
所需的输出:将“剑”与“剑”匹配而不是“剑士”
答案 0 :(得分:1)
您可以尝试re.finditer:
>>> import re
>>> user_input = "var"
>>> text = "var variable var variable"
>>> regex = r"(?=\b%s\b)" % re.escape(user_input)
>>> [m.start() for m in re.finditer(regex, text)]
[0, 13]
它会迭代地找到所有匹配。
答案 1 :(得分:1)
您似乎想要使用与整个字符串匹配的模式。请注意,当您要查找部分匹配时,需要\b
字边界。当您需要完整的字符串匹配时,您需要 anchors 。由于re.match
在字符串的开头处锚定匹配项,因此在模式结尾处所需的只是$
(字符串位置的结尾):
regex = '{}$'.format(re.escape(user_input))
然后使用
re.match(regex, search_string, re.IGNORCASE)