截断列表项



假设有一个列表

["element1 abc, 1999 mno", "element2 abc", "element3 xyz, 2019 pqr", "element4 xyz", "element5 xyz, 1999 wasd"]

如果存在模式,我想截断列表中的所有项目。假设模式为["xyz, d{4}", "abc, d{4}"]结果列表将是

["element1 abc, 1999", "element2 abc", "element3 xyz, 2019", "element4 xyz", "element5 xyz, 1999"]

位置0、2和4处的项被截断,因为遇到了模式"xyz,"+year"abc,"+year

下面是我当前的代码

import re
ls = ["element1 abc, 1999 mno", "element2 abc", "element3 xyz, 2019 pqr", "element4 xyz", "element5 xyz, 1999 wasd"]
outls = []
pattern = ["xyz, d{4}", "abc, d{4}"]
for i in ls:
appendTracker = 1
for j in pattern:
match = re.search(j, i)
if match:
matched = match.group()
appendTracker = 0
outls.append(i[:i.rfind(matched)+len(matched)])
break

if appendTracker:
outls.append(i)

有更好的方法吗。时间不是什么大问题,但我确实想减少的代码行

由于您的模式有固定的长度,因此可以通过正向查找(?<=)找到模式后面的单词。

代码

ls = ["element1 abc", "element2 abc", "element3 xyz, 2019 pqr", "element4 xyz", "element5 xyz, 1999 wasd"]    
ans = [re.sub(r"(?<=(xyz|abc), d{4}).*", "", s) for s in ls]

输出

print(ans)
['element1 abc',
'element2 abc',
'element3 xyz, 2019',
'element4 xyz',
'element5 xyz, 1999']

相关内容

  • 没有找到相关文章

最新更新