Python通过另一个列表解析字符串列表并返回匹配项
我有两个文本文件,我已经变成了列表。列表1中的行如下所示:Python通过另一个列表解析字符串列表并返回匹配项,python,regex,string,text,Python,Regex,String,Text,我有两个文本文件,我已经变成了列表。列表1中的行如下所示: 'U|blah|USAA032812134||blah|blah|25|USAA032812134|blah|A||4||blah|2019-05-28 12:54:59|blah|123456||blah' ['smuspid\n', 'USAA032367605\n', 'USAA032367776\n', 'USAA044754265\n', 'USAA044754267\n'] 清单2的行如下所示: 'U|blah|USAA
'U|blah|USAA032812134||blah|blah|25|USAA032812134|blah|A||4||blah|2019-05-28 12:54:59|blah|123456||blah'
['smuspid\n', 'USAA032367605\n', 'USAA032367776\n', 'USAA044754265\n', 'USAA044754267\n']
清单2的行如下所示:
'U|blah|USAA032812134||blah|blah|25|USAA032812134|blah|A||4||blah|2019-05-28 12:54:59|blah|123456||blah'
['smuspid\n', 'USAA032367605\n', 'USAA032367776\n', 'USAA044754265\n', 'USAA044754267\n']
我想返回列表1中与列表2匹配的每一行。我已经尝试使用正则表达式来实现此目的:
found = []
check = re.compile('|'.join(list2))
for elem in list1:
if check.match(elem):
found.append(elem)
但是我上面的代码返回了一个空列表。有什么建议吗?我想不用正则表达式也可以: 方法1 产出1
方法2使用列表理解 产出2
方法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
你想要匹配或精确相等。或者,列表2的格式与我之前认为的不同,我编辑了这个问题以显示元素的外观。这是否会更改您的代码,因为在我尝试此方法时,此方法仍然返回空列表。
['|USAA032812134', 'blah']
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)
['USAA032812134']