Python搜索字符串中列表中的确切单词?

Python搜索字符串中列表中的确切单词?,python,regex,list,search,find,Python,Regex,List,Search,Find,我需要从字符串中的列表中找到确切的单词 我尝试了下面的代码。这里我得到的是列表中单个单词的精确匹配,但如何匹配列表中的两个单词 categories_to_retain = ['SOLID', 'GEOMETRIC', 'FLORAL', 'BOTANICAL', 'STRIPES', 'ABSTRACT', 'ANIMAL', 'GRAPHIC PRINT', 'ORIENTAL', 'DAMASK', 'TEXT', 'CHEVRON', 'PLAID', 'PA

我需要从字符串中的列表中找到确切的单词

我尝试了下面的代码。这里我得到的是列表中单个单词的精确匹配,但如何匹配列表中的两个单词

categories_to_retain = 
['SOLID',
 'GEOMETRIC',
 'FLORAL',
 'BOTANICAL',
 'STRIPES',
 'ABSTRACT',
 'ANIMAL',
 'GRAPHIC PRINT',
 'ORIENTAL',
 'DAMASK',
 'TEXT',
 'CHEVRON',
 'PLAID',
 'PAISLEY',
 'SPORTS']

x = " Beautiful Art By  Design Studio **graphic print** Creates A **TEXT** Design For This Art Driven Duvet. Printed In Remarkable Detail On A Woven Duvet, This Is An Instant Focal Point Of Any Bedroom. The Fabric Is Woven Of Easy Care Polyester And Backed With A Soft Poly/Cotton Blend Fabric. The Texture In The Fabric Gives Dimension And A Unique Look And Feel To The Duvet."

x = x.upper()

print x

#x = "GRAPHIC"
#x = "GRAPHIC PRINTS"


matches = [cat for cat in categories_to_retain if cat in x.split()]

matches

Output:
['TEXT']
在这里你可以看到我的列表中有一个单词叫做“图形打印”。我想从我的字符串中找到这个词

我还需要找到这个词,即使它是复数时态或过去时。例如,条纹、条纹、图形打印等

谢谢,
Niranjan

在这里,您使用默认的split()拆分字符串,这意味着它将在每个空间拆分:在x.split()中有字符串“GRAPHIC”和“PRINT”,但没有“GRAPHIC PRINT”。您可能想使用“if cat in x”,我相信这会返回您在本例中所需的内容

这应该起作用:

matches = [cat for cat in categories_to_retain if cat in x]

您可以使用正则表达式,这也将有助于避免匹配字符的序列,并将显示准确的输入字

import re
matches = []
categories_to_retain = ['SOLID',
     'GEOMETRIC',
     'FLORAL',
     'BOTANICAL',
     'STRIPES',
     'ABSTRACT',
     'ANIMAL',
     'GRAPHIC PRINT',
     'ORIENTAL',
     'DAMASK',
     'TEXT',
     'CHEVRON',
     'PLAID',
     'PAISLEY',
     'SPORTS']

x = " Beautiful Art By  Design Studio **graphic print** Creates A **TEXT** Design For This Art Driven Duvet. Printed In Remarkable Detail On A Woven Duvet, This Is An Instant Focal Point Of Any Bedroom. The Fabric Is Woven Of Easy Care Polyester And Backed With A Soft Poly/Cotton Blend Fabric. The Texture In The Fabric Gives Dimension And A Unique Look And Feel To The Duvet."

x = x.upper()

print(x)

def searchWholeWord(w):
    return re.compile(r'\b({0})\b'.format(w), flags=re.IGNORECASE).search

for cat in categories_to_retain:
    return_value = searchWholeWord(cat)(x)
    if return_value:
        matches.append(cat)

print(matches)
输出:

['GRAPHIC PRINT', 'TEXT']

使用带边界的正则表达式来获得精确匹配,即使您只有一个单词,如果您试图忽略任何标点符号,您的逻辑也无法工作:

import re

patts = re.compile("|".join(r"\b{}\b".format(s) for s in categories_to_retain), re.I)

x = " Beautiful Art By  Design Studio **graphic print** Creates A **TEXT** Design For This Art Driven Duvet. Printed In Remarkable Detail On A Woven Duvet, This Is An Instant Focal Point Of Any Bedroom. The Fabric Is Woven Of Easy Care Polyester And Backed With A Soft Poly/Cotton Blend Fabric. The Texture In The Fabric Gives Dimension And A Unique Look And Feel To The Duvet."

print(patts.findall(x))
这将给你:

['graphic print', 'TEXT']

“graphic print”找不到,因为我想它被分为“graphic”和“print”。使用带有边界的正则表达式您需要自己创建一个split()函数,它查找变量x中定义的两颗星内的单词。谢谢,实际上我一开始就是这么做的,但这里的问题是,如果它在字符串中找到我列表中的任何单词,它也可以给我答案。例如,如果它找到类似“纹理”的单词,它将匹配“文本”。@Niranjanp抱歉回答错误,我已经更新了使用正则表达式的代码。谢谢。这对我有用。还有一个问题,若列表中的单词预设为复数或过去时,该如何匹配。例如,如果它包含图形打印、文本或条带。将它们添加到要匹配的单词列表中对于更复杂的文本处理,您可能需要类似nltk的内容,对于正则表达式方法,您可以使用?确定,谢谢。我要试试那个。我接受了你的回答,再次谢谢。我确实是为了得到精确的匹配。如果我这样做的话,它也会匹配我列表中文字的文字纹理。