正则表达式在数学表达式中添加空格(cab +++ = 1 + 2 + 3 - > cab ++ + = 1 + 2 + 3)

时间:2015-01-09 12:08:31

标签: regex perl

我有这个正则表达式(几乎可以工作):

 s/(?<!\+|-| )(\+|-)(?!=|\+|-| )/ $1 /g;

https://regex101.com/r/oQ8qU8/2

我想在每个+-字符之前和之后添加一个空格。这是测试字符串:

 cab+=1+2+3+deb++-5+-5;

输出应为:

 cab += 1 + 2 + 3 + deb++ - 5 + -5;

我想处理所有C / C ++特殊情况,例如负数A=-C - &gt; A = -C,前/后递增变量A++=3 - &gt; A++ = 3 ...

在这里使用正则表达式有一个很好的解决方案吗?

1 个答案:

答案 0 :(得分:-1)

我为你写了一个子,因为那些正则表达式不断增长和成长......

sub format{
        my $text = shift;
        #substitute '+'
        $text =~ s/(?<!\+)\+(?!\+|=)/ \+ /g;
        #substitute '-'        
        $text =~ s/(?<!-)-(?!-|=|>)/ - /g;
        #substitute '= , +=, -= (...)'
        $text =~ s/([\+,-,\*,\/]?=)/ $1 /g;

        #get rid of additional spaces:
        $text =~ s/  / /g;
        return $text;
}

以下是一些结果:

converting: foo+--bar++-3 += 3-x--+bar = ++c-*const->char++ +2
to:         foo + --bar++ - 3 += 3 - x-- + bar = ++c - *const->char++ + 2

converting: ++x->(a+b+--c) *= c++-++b/=9;
to:         ++x->(a + b + --c) *= c++ - ++b /= 9;

converting: b+c+a+d-=++*char->(--c+d);
to:         b + c + a + d- = ++*char->(--c + d);