我试图在一个大字符串中找到多个值。
例如,我想先捕获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
答案 0 :(得分:0)
您可以将re.findall
与可以捕获两组所需值的模式一起使用:
re.findall(r'^currency=([^\n]+).*?\[@(\d+)', s, re.M | re.S)
这将返回:
[('dollor', '1234'), ('euro', '98766')]
答案 1 :(得分:0)
另一个使用re.findall和2个捕获组的选项是匹配货币,然后重复匹配以换行符结尾的以下行,直到有以[@
开头的行,然后匹配以下1+第二组中的数字。
此方法仅使用多行标志
^currency=(\S+)(?:\n.*)*?\n\[@(\d+)
例如:
re.findall(r"^currency=(\S+)(?:\n.*)*?\n\[@(\d+)", s, re.MULTILINE)
结果
[('dollor', '1234'), ('euro', '98766')]