如何使用RegEx re.search和group()在python中获取多行匹配数据

如何使用RegEx re.search和group()在python中获取多行匹配数据,python,regex-group,Python,Regex Group,我的课文是这样的 text = [ BP2572 23, BP2345 34, BP2457 45, BP2866 56 ] 我想使用search和group() 我所希望的是以下输出 [BP2572, BP2345, BP2457, BP2866] [23, 34, 45, 56] 我尝试了这个代码,但没有得到我所期望的 >>re.findall(r"\s+[A-Z]{2}\d{4} \d{2}",text) ['\nBP2

我的课文是这样的

text =

  [ BP2572 23,
    BP2345 34,
    BP2457 45,
    BP2866 56 ] 
我想使用
search
group()

我所希望的是以下输出

[BP2572, BP2345, BP2457, BP2866]
[23, 34, 45, 56]
我尝试了这个代码,但没有得到我所期望的

>>re.findall(r"\s+[A-Z]{2}\d{4} \d{2}",text)

['\nBP2572 23', '\nBP2345 34', '\nBP2457 45', '\nBP2866 56']

>>re.search(r"\s+([A-Z]{2}\d{4}) (\d{2})",text).group(1)
>>re.search(r"\s+([A-Z]{2}\d{4}) (\d{2})",text,re.DOTALL).group(1)

'BP2572' #my expected output is [BP2572, BP2345, BP2457, BP2866]

>>re.search(r"\s+([A-Z]{2}\d{4}) (\d{2})",text).group(2)
>>re.search(r"\s+([A-Z]{2}\d{4}) (\d{2})",text,re.DOTALL).group(2)

'23' #my expected output is `[23, 34, 45, 56]`
在这里,我只得到了第一场比赛

如何使用
re.search
group()
来获取所有匹配结果,而不仅仅是第一个匹配?

您不能使用来查找多个匹配项。
re.search
re.match
都只返回第一个匹配项

您需要对一个模式的多个匹配项使用或

你可以做:

 >>> re.findall(r'^[ \t]*([A-Z]{2}\d{4}[ \t]+\d{2})', text, flags=re.M)
 ['BP2572 23', 'BP2345 34', 'BP2457 45', 'BP2866 56']
或者,如果您只需要第一部分:

 >>> re.findall(r'^[ \t]*([A-Z]{2}\d{4})[ \t]+\d{2}', text, flags=re.M)
 ['BP2572', 'BP2345', 'BP2457', 'BP2866']
或仅第二部分:

 >>> re.findall(r'^[ \t]*[A-Z]{2}\d{4}[ \t]+(\d{2})', text, flags=re.M)
 ['23', '34', '45', '56']
或两部分:

 >>> re.findall(r'^[ \t]*([A-Z]{2}\d{4})[ \t]+(\d{2})', text, flags=re.M)
 [('BP2572', '23'), ('BP2345', '34'), ('BP2457', '45'), ('BP2866', '56')]
或者,您可以进行简单拆分:

>>> [line.split()[0] for line in text.splitlines() if line]
['BP2572', 'BP2345', 'BP2457', 'BP2866']
>>> [line.split()[1] for line in text.splitlines() if line]
['23', '34', '45', '56']

我想使用分组来提取数据组,我的实际文本包含很多组,因此使用findall()很费劲,因为每次我都必须键入不同的匹配代码。您能用re.search和group()编写此代码吗?
re.search
一次只匹配一个元素。可以对多个匹配组使用
re.findall
,然后将元组分开,或者
re.finditer
我的文本在列表中,因此无法使用拆分,请注意,我现在编辑了我的“文本”。现在可以使用
re.search
但需要使用循环或理解。但是如果您有字符串列表,您只需对字符串列表中的e执行
[e.split()[1]
如何使用re.search和group()获得所有匹配结果,而不仅仅是第一个匹配?你不能再问你这个问题了。如果
text
是一个列表,如果没有循环或理解,您将无法对该列表使用
re.search
。请纠正你的问题。
text
是多行字符串还是字符串列表?如果它是一个字符串列表,您是如何将其与
re.search
一起使用的?