返回列表中的所有正则表达式匹配项

时间:2020-07-15 01:05:03

标签: python-3.x regex

尝试以正确的形式获取列表中的所有匹配项。 例如:

import re

regex = re.compile(r'(\d{1,4})')
text = ['(261, 264)', '(458, 393)', '(960, 540)', '(542, 424)', '(541, 424)']
print(regex.findall(text[0]))
print(list(filter(regex.findall, text)))

输出:

['261', '264']
['(261, 264)', '(458, 393)', '(960, 540)', '(542, 424)', '(541, 424)']

我正在尝试以与顶部相同的格式获取底部(不带括号或逗号)。这可能吗?我似乎无法获得这些函数来返回列表中的所有匹配项(我想尽可能在​​1行中使它像list(filter())一样)

编辑:: 所需的输出:

['261', '264', '458', '393', '960', '540', '542', '424', '542', '424']

3 个答案:

答案 0 :(得分:0)

尝试一下:

import re

regex = re.compile(r'(\d{1,4})')
text = ['(261, 264)', '(458, 393)', '(960, 540)', '(542, 424)', '(541, 424)']
print(regex.findall(text[0]))
print([elem for tup in map(regex.findall, text) for elem in tup])

答案 1 :(得分:0)

合并所有匹配项(通过遍历所有匹配项)的列表理解:

import re

regex = re.compile(r'(\d{1,4})')
text = ['(261, 264)', '(458, 393)', '(960, 540)', '(542, 424)', '(541, 424)']

print([x for t in text for x in regex.findall(t)])

答案 2 :(得分:0)

这是我的解决方案:

解释

  1. 找到列表中每个元素的匹配项(就像您所做的一样)

这将为您带来以下结果:

[['261', '264'],
 ['458', '393'],
 ['960', '540'],
 ['542', '424'],
 ['541', '424']]
  1. 平铺此列表:

哪一个会让您得到想要的结果

['261', '264', '458', '393', '960', '540', '542', '424', '541', '424']

最终密码

import itertools
import re

original_list =  ['(261, 264)', '(458, 393)', '(960, 540)', '(542, 424)', '(541, 424)']
regex =  re.compile(r"\d\d\d")


matches_per_element = [regex.findall(txt) for txt in original_list]
flattened_list = list(itertools.chain(*matches_per_element))


### Display the result
print(flattened_list)
>>> ['261', '264', '458', '393', '960', '540', '542', '424', '541', '424']