在字符串列表中查找完全匹配

时间:2015-11-11 05:23:57

标签: python regex string string-matching

非常新的,所以请耐心等待......

我有一个预定义的单词列表

checklist = ['A','FOO']

以及来自line.split()的单词列表,看起来像这样

words = ['fAr', 'near', 'A']

我需要checklistwords的完全匹配,所以我只找到'A':

if checklist[0] in words:

这没用,所以我尝试了一些我在这里找到的建议:

if re.search(r'\b'checklist[0]'\b', line): 

无济于事,因为我显然无法找到那样的列表对象...对此有何帮助?

4 个答案:

答案 0 :(得分:9)

使用集合比遍历列表要快得多。

checklist = ['A', 'FOO']
words = ['fAr', 'near', 'A']
matches = set(checklist).intersection(set(words))
print(matches)  # {'A'}

答案 1 :(得分:6)

这将为您提供完整匹配的列表。

matches = [c for c in checklist if c in words]

与以下内容相同:

matches = []
for c in checklist:
  if c in words:
    matches.append(c)

答案 2 :(得分:1)

套装将满足您的需求。有issubset方法集。示例如下:

checklist = ['A','FOO']
words = ['fAr', 'near', 'A']

print set(checklist).issubset(set(words))

如果您只需要测试两个列表中是否有注释元素,则可以更改为intersection方法。

答案 3 :(得分:0)

让我知道这是否适合您,

In [67]: test = re.match(r"(.*?)A(.*?)$", "CAT")

在[68]中:test.group(2)

出[68]:' T'

在[69]中:test.group()

Out [69]:' CAT'

在[70]中:test.group(1)

Out [70]:' C'

如果模式in不匹配,则测试对象不存在。