2013-10-07 43 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,因此可以將它作爲另一個表達式的一部分進行匹配。當然,這裏子模式也需要改變,因爲沒有第二組。