我有预感我没有看到解决这个问题的简单方法,所以在我撕掉头发之前,也许有人可以提供帮助。
这是一些代码:
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模块上遗漏了什么?或者这个问题比我想象的更复杂?
感谢。
答案 0 :(得分:0)
对任何感兴趣的人: 经过一番思考后,我使用regex.split来解决自己的问题。
我通过捕捉更广泛的匹配来分割整行,然后单独替换每个匹配。