我有一个字符串(基本上是缩写-例如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”运算是否有任何优雅的表达方式?
答案 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']