Python精确地匹配字符串

Python精确地匹配字符串,python,text,nltk,Python,Text,Nltk,给定一个字符串,我想确定两个字符串是否在其中。例如,给定“狗大声吠叫”,我想搜索“狗”和“大声吠叫”。但是,如果句子是“顽强的人”,我就不想把“狗”和“顽强的人”匹配起来 我正在使用以下工具: if re.search(r'\s'+word+'\s', str1) and re.search(r'\s'+otherWord+'\s', str1) and word != otherWord: 我的问题是1。如果每个标点符号前面都有空格,我的方法行得通吗?2.有没有更好的方法,这样我就不必对字符

给定一个字符串,我想确定两个字符串是否在其中。例如,给定“狗大声吠叫”,我想搜索“狗”和“大声吠叫”。但是,如果句子是“顽强的人”,我就不想把“狗”和“顽强的人”匹配起来

我正在使用以下工具:

if re.search(r'\s'+word+'\s', str1) and re.search(r'\s'+otherWord+'\s', str1) and word != otherWord:

我的问题是1。如果每个标点符号前面都有空格,我的方法行得通吗?2.有没有更好的方法,这样我就不必对字符串进行预处理,在每个标点符号前面加空格?

您可以使用单词边界
\b
(在单词字符和非单词字符之间匹配)而不是空格
\s
。还需要将所有正则表达式模式定义为原始字符串

if re.search(r'\b'+word+r'\b', str1) and re.search(r'\b'+otherWord+r'\b', str1) and word != otherWord:

您能解释一下“将regex模式定义为原始字符串”吗?您正确地将第一个模式
r'\s'
定义为原始字符串,但在第二种情况下
'\s'
,您没有这样做。如果未能将模式定义为原始字符串,则必须将该模式中存在的所有反斜杠转义一次,如
'\\s'