如何验证字符串中出现的确切单词?
我需要说明的情况下,如“国王”一词有一个问号紧跟在下面的例子。
Unigrams这应该是假的

In [1]: answer = "king"
In [2]: context = "we run with the king? on sunday"

这应该是假的
In [1]: answer = "king tut"
In [2]: context = "we run with the king tut? on sunday"

Unigrams这应该是真的
In [1]: answer = "king"
In [2]: context = "we run with the king on sunday"

嗯,这应该是真的
In [1]: answer = "king tut"
In [2]: context = "we run with the king tut on sunday"

正如人们所提到的,对于unigram的情况,我们可以通过将字符串拆分成一个列表来处理它,但这对n个程序不起作用。
在阅读了一些帖子之后,我想我应该试着用后视镜来处理,但我不确定。

最佳答案

使用这样的正则表达式:

reg_answer = re.compile(r"(?<!\S)" + re.escape(answer) + r"(?!\S)")

查看Python demo
细节:
(?<!\S)-一个负的lookbehind,以确保匹配前面有空格或字符串的开头
re.escape(answer)-使搜索词中所有特殊字符都被视为文字字符的预处理步骤
(?!\S)-一个负数前视,以确保匹配后跟有空格或字符串结尾。

08-05 12:35