我试图在一个大字符串中找到多个值。 例如,我想首先捕获currency=
值,如果未提及任何内容,则忽略,然后是第一个以[@
开头的下一个字符串
[Namex]
Name=jsdjsk
value=dfdfdf
currency=dollor
market=sfdsf
endvalue=xyz
[@1234#feagbdvsdf]
[Namey]
Name=jsdjsk
value=dfdfdf
currency=
endvalue=xyz
[@5777#feagbdvsdf]
[Namez]
Name=jsdjsk
currency=euro
market=sfdsf
[@98766#feagbdvsdf]
我能够在下面找到货币的第一个值,但可以得到下一个值。
re.findall('currency=(.+)', s)
我期待以下结果:
dollor, 1234
euro, 98766
您可以将re.findall
与在两组中捕获所需值的模式一起使用:
re.findall(r'^currency=([^n]+).*?[@(d+)', s, re.M | re.S)
这将返回:
[('dollor', '1234'), ('euro', '98766')]
演示:https://ideone.com/vTynYJ
使用 re.findall 和 2 个捕获组的另一个选项是匹配货币,然后重复匹配以下以换行符结尾的行,直到有以[@
开头的 al 行,然后匹配第二组中的以下 1+ 位数字。
此方法仅使用多行标志
^currency=(S+)(?:n.*)*?n[@(d+)
正则表达式演示 |蟒蛇演示
例如:
re.findall(r"^currency=(S+)(?:n.*)*?n[@(d+)", s, re.MULTILINE)
结果
[('dollor', '1234'), ('euro', '98766')]