2 回答

TA贡献1784条经验 获得超7个赞
您可以通过以下解决方案实现您的需求:
import re
s="""Claim Status\r\n[Primary Status: Paidup to Rebilled]\r\nGeneral Info.\r\n[PA Number: #######]\r\nClaim Insurance: Modified\r\n[Ins. Mode: Primary], [Corrected Claim Checked], [ICN: #######], [Id: ########]"""
res = []
for m in re.finditer(r'^(.+)(?:\r?\n\s*\[(.+)])?\r?$', s, re.M):
t = []
t.append(m.group(1).strip())
if m.group(2):
t.extend([x.strip() for x in m.group(2).strip().split('], [') if ':' in x])
res.append(tuple(t))
print(res)
请参阅Python 在线演示。输出:
[('Claim Status', 'Primary Status: Paidup to Rebilled'), ('General Info.', 'PA Number: #######'), ('Claim Insurance: Modified', 'Ins. Mode: Primary', 'ICN: #######', 'Id: ########')]
使用^(.+)(?:\r?\n\s*\[(.+)])?\r?$正则表达式,您可以匹配两个连续行,第二行是可选的(由于(?:...)?可选的非捕获组),第一行被捕获到组 1 中,随后的行(以 开头[并以 结束])被捕获到组 2 中。 (注意这\r?$是必要的,因为在多行模式下$只匹配换行符之前而不是回车符。)第 1 组值被添加到一个临时列表,然后第二组的内容被分割], [(如果你不确定空格的数量,您可以使用re.split(r']\s*,\s*\[', m.group(2))) 然后只将那些包含 a 的项目添加:到临时列表中。
添加回答
举报