正则表达式在数学表达式中添加空格 (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);
我有这个正则表达式(几乎可以工作):
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);