0

我想用显式乘法(例如“a x”)替换字符串中的隐式乘法(例如“ax”)。我已经完成了大部分工作,除了我还想添加它以用“a(x+1)”替换诸如“a(x +1)”之类的东西。

到目前为止,我的模式是:

pattern = re.compile("([0-9]+|[a-z\)])([a-z\(])", re.IGNORECASE)

pattern.sub用来做实际的替换:

s = "RX(3X)R"
print pattern.sub('\\1*\\2', s)

但是,它不会用“a*(”替换“a(”。我该如何解决这个问题?

4

1 回答 1

2

您可以使用前瞻断言:

>>> pattern = re.compile("([0-9]+|[a-z\)])(?=[a-z\(])", re.IGNORECASE)
>>> s = "RX(3X)R"
>>> print pattern.sub('\\1*', s)
R*X*(3*X)*R

您的正则表达式的问题是您的模式匹配RX然后插入一个*. 但是,您不能再次匹配X以插入*between X(。如果您使用前瞻,那么您不会使用它,X因此它可以作为另一个表达式的一部分进行匹配。当然,这里的子模式也需要改变,因为没有第二组。

于 2013-10-07T15:51:11.920 回答