如何验证字符串中出现的确切单词?
我需要说明的情况下,如“国王”一词有一个问号紧跟在下面的例子。
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)
-一个负数前视,以确保匹配后跟有空格或字符串结尾。