regex 匹配字符串中的整个单词,包括特殊字符[重复]

vx6bjr1n  于 2023-05-19  发布在  其他
关注(0)|答案(1)|浏览(180)

此问题已在此处有答案

Word boundary with words starting or ending with special characters gives unexpected results(2个答案)
Regex whitespace word boundary(3个答案)
2天前关闭。
我知道现有的多个答案表明:

def contains(string, word):
    return bool(re.search(rf"\b{word}\b", string))

但这种模式对字母数字字符进行了特殊处理。例如,contains("hello world!", "world!")返回False,而contains("hello world!", "world")返回True
我需要一个更“简单”的搜索模式,只要它以超字符串的边界或空格开始和结束,就可以匹配子字符串。(期望行为:与上面的例子相反)。

qmelpv7a

qmelpv7a1#

您需要避免使用\b(字边界),并Assert上一个和下一个位置没有非空格字符。此外,使用re.escape更安全,因为您的搜索词可能包含特殊的正则表达式 meta字符。
你可以使用这个Python代码:

def contains(string, word):
    return bool(re.search(rf"(?<!\S){word}(?!\S)", re.escape(string)))

print (contains("hello world!", "world"))
print (contains("hello world!", "world!"))

输出:

False
True

在线代码演示

相关问题