正则表达式:如何检查文本是否至少包含字符集中的所有字母?

时间:2019-02-20 08:58:15

标签: python regex python-3.x string regex-group

我有一个字符串(基本上是缩写-例如USA,所有字母都用大写字母表示)和文本列表。我想选择那些包含字符串中所有字母的文本(区分大小写的匹配)。例如,

string = "USA"

texts = ["United States of America", "United States", "United States of America and Iraq"]

#Result shoud be:

results = ["United States of America", "United States of America and Iraq"]

我尝试使用(?=U)(?=S)(?=A)(这是重复问题的答案所暗示的意思),但这似乎不起作用,因为正则表达式期望字母以确切的顺序出现。另外,我也不想检查每个大写字母后面的小写字母和空格,例如[?=U]([a-zA-Z]*[\s]+)*[?=S]([a-zA-Z]*[\s]+)*[?=A][a-zA-Z]*,因为它们只是多余的(虽然不能很好地工作)。

我正在寻找的是尝试使用等效于[USA]的表达式-它执行OR操作以选择包含至少一个字符串字母的文本。在正则表达式中执行“ AND”运算是否有任何优雅的表达方式?

1 个答案:

答案 0 :(得分:0)

您可能正在与all()一起使用in

string = "USA"

texts = ["United States of America", "United States", "United States of America and Iraq", "Germany"]
vector = [all([x for c in string for x in [c in text]]) for text in texts]

这产生

[True, False, True, False]


因此,与filter()结合使用时,您不需要任何正则表达式:

new_text = list(
    filter(
        lambda text: all([x for c in string for x in [c in text]]),
        texts
    )
)
print(new_text)

后者会产生

['United States of America', 'United States of America and Iraq']