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

Regex add spaces in a math expression (cab+++=1+2+3 -> cab++ += 1 + 2 + 3)

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

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

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

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

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

输出应该是:

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

我想处理所有 C/C++ 特殊情况,例如负数 A=-C->A = -C、pre/post 递增变量 A++=3 -> A++ = 3...

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

我为你写了一个子程序,因为那些正则表达式一直在增长和增长......

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