如何检查Python中两个单词是否相邻?

时间:2018-02-16 20:19:19

标签: python regex

我正在尝试创建一个函数来测试字符串中是否有两个单词,但我一直在"对于两个测试来说,它们都是" ,因此每个案例是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")

1 个答案:

答案 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) - 类似于上面解释的那个。刚刚交换了marthadaisy