用正则表达式替换两个不同的字符

问题描述:

我想用正则表达式在圆括号和算术运算符和数字之间加一个空格。用正则表达式替换两个不同的字符

例如,我想(+ 2 3)

我写这个正则表达式替换(+ 2 3),但似乎并没有工作:

((\(|\))[\d\w +*/-])+ 

我使用Python来替换字符串中的字符。

+0

1)数字总是单数位还是多位数字,例如'(+ 2 35)'中的35可能? 2)是否是可接受的非正则表达式解决方案? – kums 2014-10-05 18:15:26

+0

只有多位和正则表达式 – NaN 2014-10-05 18:43:54

我想你想这样的事情,

>>> import re 
>>> s = "(+ 2 3)" 
>>> m = re.sub(r'(?<=\()(?=[-\d+/*])|(?<=[-\d+/*])(?=\))', r' ', s) 
>>> m 
'(+ 2 3)' 
+0

更好'(? NaN 2014-10-05 18:41:03

正则表达式:([(]+)|([)]+)

换人:\1 \2

结果:(+ 2 3)

Live Preview here

我不知道你的要求,但是这是一个可能的解决方案:

re.sub(r'([()+*/-]|\w+) *', r'\1 ', s) 

DEMO

样品输入:

(+1 3) 
( + 4 (* (/ 6 4)74)) 
(+ u(- a34 234)) 

输出示例:

(+ 1 3) 
(+ 4 (* (/ 6 4) 74)) 
(+ u (- a34 234)) 

的这个解决方案的一个小问题是最后增加了额外的空间。