正则表达式搜索单词中带双引号的字符串

时间:2019-08-30 05:56:37

标签: python regex

在正则表达式中用双引号引起来的搜索字

def key_found(key, sentence):                   # Checks for key in sentence.
    search_string = r'\b' + key + r'\b'
    match_found = re.search(search_string, sentence, re.IGNORECASE)
    if match_found is None:
        return False
    else:
        return True

key = '20"x30"'
sentence = '1 Unit Lace Borders Tissue Paper 20"x30" Half Ream Recycled Unit pack 120'
if key_found(key, sentence):
    print("True")

它不是在句子中搜索关键字

2 个答案:

答案 0 :(得分:1)

def key_found(key, sentence)中执行以下操作:

def key_found(key, sentence):                   # Checks for key in sentence.
    match_found = re.search(key, sentence, re.IGNORECASE)
    if match_found is None:
        return False
    else:
        return True

此外,如果您不想忽略大小写:

if key in sentence:
    print("True")

正如您在评论中提到的,您需要完全匹配,为此使用re.match,代码:

def key_found(key, sentence):
  for word in sentence.split():
    match_found = re.match(key, word, re.IGNORECASE)
    if match_found is not None:
        return True

答案 1 :(得分:1)

我不确定您是否需要这种复杂的方法,但是当前代码的直接问题(和解决方法)是您正在使用的regex模式本身。应该是这样:

search_string = r'(?<!\S)' + key + r'(?!\S)'

正则表达式模式\b20"x30"\b无法与输入匹配的原因是,"(一个非单词字符)与后面的空格(另一个非单词字符)之间的边界是不是单词边界。相反,请使用(?!\S)来检测后面是空格字符还是字符串的结尾(对于(?<!\S)则相反)。

在进行了此更改之后,保​​持其余代码不变,我得到了以下输出:

True