如何使用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
一起使用的?