2013-10-07 13 views
0

我想用明确的乘法(例如“a x”)替换字符串中的隐式乘法(例如“ax”)。我已经完成了大部分工作,除了我也想添加它来替换诸如“a(x + 1)”和“a(x + 1)”之类的东西。Python正则表达式 - 创建显式乘法

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

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

我使用pattern.sub做实际的更换:

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

但是,它并不能取代 “一个(” 改为” *( ?”我怎样才能解决这个

回答

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以在X(之间插入*。如果您使用超前视图,则不会使用X,因此可以将它作为另一个表达式的一部分进行匹配。当然,这里子模式也需要改变,因为没有第二组。