Python正则表达式,如何从多个匹配中替换多个组

时间:2016-09-05 12:42:35

标签: python

我有预感我没有看到解决这个问题的简单方法,所以在我撕掉头发之前,也许有人可以提供帮助。

这是一些代码:

gr = regex.compile(r'({[^{]*(?>{[^{}]+})*)\s\\over\s([^{}]+(?>{[^{}]*})*})')
string1 = "{a \over b}"
string2 = "{x \over b{x}} {{d}d \over x}}"

m = regex.match(gr,string2)

reLine = regex.sub(gr,r"\\test"+m.group(1)+"}{"+m.group(2),string2)

目标基本上是这样的:

before {a \over b}
after \test{a}{b}

我必须查看文本文件并替换所有这些匹配项。

我的问题是regex.search或regex.match它只匹配一次并返回一个匹配的组,但我需要多个匹配,以防{a \ over b}在同一行重复多次。

因此,使用'string2',它会捕获'{x'作为第一组,'b {x}}'作为第二组,并停止捕获。那么当我尝试替换时,它也将第一个匹配的组替换为第二个'\ over'等式。

我在regexr.com上练习了正则表达式,它有一个'替换'功能。它需要所有匹配并分别替换($ 1,$ 2)所有匹配和组。

我在python regex模块上遗漏了什么?或者这个问题比我想象的更复杂?

感谢。

1 个答案:

答案 0 :(得分:0)

对任何感兴趣的人: 经过一番思考后,我使用regex.split来解决自己的问题。

我通过捕捉更广泛的匹配来分割整行,然后单独替换每个匹配。