【发布时间】:2017-08-15 15:49:15
【问题描述】:
我正在尝试使用正则表达式准确查找整个单词,但我正在搜索的单词是来自用户输入的变量值。我试过这个:
regex = r"\b(?=\w)" + re.escape(user_input) + r"\b"
if re.match(regex, string_to_search[i], re.IGNORECASE):
<some code>...
但它匹配字符串的每次出现。它匹配正确的“var”->“var”,但也匹配“var”->“var”iable,我只希望它匹配“var”->“var”或“string”->“string”
输入:“剑”
String_to_search = "曾经有一个剑匠造剑"
期望的输出:将“sword”匹配到“sword”而不是“swordsmith”
【问题讨论】:
-
请发布您的输入和所需的输出。
-
好吧,
\bvar\b无法匹配variable中的var。你为什么使用re.match?如果您想将用户输入作为一个完整的字符串进行匹配,您可以使用regex = '{}$'.format(re.escape(user_input)),然后使用re.match()。否则,如果您真的需要在较大的字符串中找到var作为整个单词,您将需要re.search和\bvar\b正则表达式。 -
难道python没有像子字符串搜索这样的非正则表达式函数吗?
-
如果python支持条件,你可以把它包装到条件边界的
(?(?=\w)\b)(?: your literal )(?(?<=\w)\b)中,而这个\b(?=\w)强制文字以\w开头 -
@sln 是的,但它会在我不想要的变量中找到任何子字符串,包括“var”。我将尝试 .format 或 re.search 和条件