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



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

最新更新