我有这样的绳子
string="""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: ########]"""
tokens=re.findall('(.*)\r\n(.*?:)(.*?])',string)
输出
('Claim Status', '[Primary Status:', ' Paidup to Rebilled]')
('General Info.', '[PA Number:', ' R180126187]')
('Claim Insurance: Modified', '[Ins. Mode:', ' Primary]')
想要的输出:
('Claim Status', 'Primary Status:Paidup to Rebilled')
('General Info.', 'PA Number:R180126187')
('Claim Insurance: Modified', 'Ins. Mode:Primary','ICN: ########', 'Id: #########')
每个结果有三个元素,因为您使用的是“捕获”正则表达式。像这样重写regexp以合并第二个和第三个匹配项:
由
(?:...)
(而不是(...)
)分隔的组是“非捕获”的,即它不算作\1
等的匹配目标,也不会被re.findall
看到。我已经使你的两个组都不捕获,并在它们周围添加了一个捕获(常规)组。你知道吗您可以使用以下解决方案来实现所需:
参见Python online demo。输出:
使用
^(.+)(?:\r?\n\s*\[(.+)])?\r?$
正则表达式,匹配两个连续的行,其中第二行是可选的(由于(?:...)?
可选的非捕获组),第一行被捕获到组1中,随后的一行(以[
开始,以]
结束)被捕获到组2中。(请注意,\r?$
是必需的,因为在多行模式下,$
只在换行符之前匹配,而不是回车符。)Group 1值被添加到临时列表中,然后第二个组的内容被], [
分割(如果您不确定空格的数量,您可以使用re.split(r']\s*,\s*\[', m.group(2))
),然后只将其中包含:
的项添加到临时列表中。你知道吗相关问题 更多 >
编程相关推荐