Python通过另一个列表解析字符串列表并返回匹配项

标签 python regex string text

我有两个文本文件,我已将它们转换为列表。 List1 的行如下所示:

'U|blah|USAA032812134||blah|blah|25|USAA032812134|blah|A||4||blah|2019-05-28 12:54:59|blah|123456||blah'

list2 的行如下所示:

['smuspid\n', 'USAA032367605\n', 'USAA032367776\n', 'USAA044754265\n', 'USAA044754267\n']

我想返回 list1 中与 list2 匹配的每一行。我尝试使用正则表达式来实现此目的:

found = []
check = re.compile('|'.join(list2))
for elem in list1:
    if check.match(elem):
        found.append(elem)

但是我上面的代码返回一个空列表。有什么建议吗?

最佳答案

我想你可以在没有正则表达式的情况下做到这一点:

方法1

list1 = ['U|blah|USAA032812134||blah|blah|25|USAA032812134|blah|A||4||blah|2019-05-28 12:54:59|blah|123456||blah']

list2 = ['|USAA032812134', '|USAA0328121304', '|USAA032999812134']

found = []
for i in list1:
    for j in list2:
        if j in i:
            found.append(j)

print(found)

输出1

['|USAA032812134']
<小时/>

使用列表推导式的方法 2

list1 = ['U|blah|USAA032812134||blah|blah|25|USAA032812134|blah|A||4||blah|2019-05-28 12:54:59|blah|123456||blah']
list2 = ['|USAA032812134', '|USAA0328121304', '|USAA032999812134', 'blah']

print([j for i in list1 for j in list2 if j in i])

输出2

['|USAA032812134', 'blah']
<小时/>

方法 3:strip() 用于新行

您可以简单地将strip()append()添加到您的found列表中:

list1 = ['U|blah|USAA032812134||blah|blah|25|USAA032812134|blah|A||4||blah|2019-05-28 12:54:59|blah|123456||blah']
list2 = ['smuspid\n', 'USAA032812134\n', 'USAA032367605\n', 'USAA032367776\n',
         'USAA044754265\n', 'USAA044754267\n']

found = []
for i in list1:
    for j in list2:
        if j.strip() in i:
            found.append(j.strip())

print(found)

输出3

['USAA032812134']

关于Python通过另一个列表解析字符串列表并返回匹配项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58775165/

相关文章:

python - Nosetests 断言错误输出格式

python - 从测试脚本中运行 pytest 测试用例

python - 将 CSV 数据流转换为 Pandas DataFrame (Python 2.7)

php - 匹配不同值的 RegEx BackReference

c - 字符串赋值的长格式表示法

python - 如何对文件中的所有其他数字求和?

regex - 根据特定值创建新变量

php - 性能明智的字符串匹配

javascript - 查找字符串中最长的单词不起作用

string - 将两个字符串连接在一起而不在 Ruby on Rails 中添加?