我知道如何在使用RegEx更强大的其他语言中做到这一点,但我不确定是否使用Python。基本上我要做的是转换
(30(5-10x))+10=20转到
(30*(5-10x))+10=20它也很好的补充
(30*(5-10*x))+10=20如果x前面有一个数字。
在Perl中,regex看起来类似于
/ \w+\K (?=\() | \)\K (?=\w) | \)\K (?=\() /*/为了照顾x:
/\d\K(?=[x])/*/如何在Python中最好地做到这一点?
发布于 2015-05-03 06:06:45
我更喜欢它,就像内特做的,也就是,只是添加*,而不是把周围的字符只把他们放回去。
>>> e = '(1+2)(30(5-10x))x+10=20'
>>> re.sub('(?<=\w|\))(?=\() | (?<=\))(?=\w) | (?<=\d)(?=x)', '*', e, flags=re.X)
'(1+2)*(30*(5-10*x))*x+10=20'这三个部分是“前”、“后”和“数字与x之间”。也许可以结合在一起,但我们可能会合并太多,所以我觉得这样做更清晰、更安全。
发布于 2015-05-03 06:48:56
我只试图翻译您的正则表达式,这样它们就不使用\K了。
您也可以通过匹配前面的字符来实现这一点,并在替换中使用它们作为反向引用。
/ \w+\K (?=\() | \)\K (?=\w) | \)\K (?=\() /*/
becomes
re.sub(r'(\w+(?=\()|\)(?=\w)|\)(?=\())', r'\\1*', original )为了照顾x:
/\d\K(?=[x])/*/变成了
re.sub(r'(\d(?=[x]))', r'\\1*', original)备注:
sin(x)转换为sin*(x)。https://stackoverflow.com/questions/30010598
复制相似问题