我正在尝试创建一个函数来测试字符串中是否有两个单词,但我一直在"对于两个测试来说,它们都是" ,因此每个案例是None
。
import re
nearby_words = ['daisy', 'martha']
def check_nearness(text):
word1 = nearby_words[0]
word2 = nearby_words[1]
pattern = re.compile("\b(?:"+word1+"\W+(?:\w+\W+){1,5}?"+word2+"|"+word2+"\W+(?:\w+\W+){1,5}?"+word1+")\b")
if re.match(pattern,text) is not None:
print('they are near')
else:
print('they are far')
check_nearness("daisy is near martha")
check_nearness("daisy is in this case more than five words from martha")
答案 0 :(得分:1)
您可以尝试使用此正则表达式:
(?:\bdaisy\b(?: +[^ \n]*){0,5} *\bmartha\b)|(?:\bmartha\b(?: +[^ \n]*){0,5} *\bdaisy\b)
<强> Click for Demo 强>
这个正则表达式适用于两种情况:
martha
之前的daisy
daisy
之前的martha
<强>解释强>
(?:\bdaisy\b(?: +[^ \n]*){0,5} *\bmartha\b)
\b
- 字边界daisy
- 匹配daisy
\b
- 字边界(?: +[^ \n]*){0,5}
- 匹配0到5次出现的空格,后跟不是空格或换行符的字符*
- 匹配0+出现的空格\b
- 字边界martha
- 匹配martha
\b
- 字边界|
- 或(?:\bmartha\b(?: +[^ \n]*){0,5} *\bdaisy\b)
- 类似于上面解释的那个。刚刚交换了martha
和daisy
。