在字符串中找到特定单词后找到单词

时间:2019-04-10 05:33:32

标签: python regex

我试图在一个大字符串中找到多个值。 例如,我想先捕获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

2 个答案:

答案 0 :(得分:0)

您可以将re.findall与可以捕获两组所需值的模式一起使用:

re.findall(r'^currency=([^\n]+).*?\[@(\d+)', s, re.M | re.S)

这将返回:

[('dollor', '1234'), ('euro', '98766')]

演示:https://ideone.com/vTynYJ

答案 1 :(得分:0)

另一个使用re.findall和2个捕获组的选项是匹配货币,然后重复匹配以换行符结尾的以下行,直到有以[@开头的行,然后匹配以下1+第二组中的数字。

此方法仅使用多行标志

^currency=(\S+)(?:\n.*)*?\n\[@(\d+)

Regex demo | Python demo

例如:

re.findall(r"^currency=(\S+)(?:\n.*)*?\n\[@(\d+)", s, re.MULTILINE)

结果

[('dollor', '1234'), ('euro', '98766')]