使用Python和正则表达式,我需要在C程序的每个赋值运算符的两侧添加一个空格,但在注释中跳过该运算符:
int x;
int y=100;
x=y;
// a=b+c
/* i=j+k */
以上内容需要翻译为:
int x;
int y = 100;
x = y;
// a=b+c
/* i=j+k */
我已经尝试过使用此正则表达式跳过单行注释:
try:
source = re.sub(r'(?<!//)(.*)([^\s])=([^\s])', r'\1\2 = \3', source)
except Exception as e:
pass
但它不起作用。
谢谢你的帮助。
最佳答案
这个问题比您想象的要难一些。考虑C具有运算符!=
,==
,+=
,-=
等。可能有字符串"a=b"
,char
s '='
甚至short
和int
,例如'=='
和'===='
。注释可能是多行的。您还应该断言C代码是正确的。
使用正则表达式是不可能的。
尝试使用简单的状态机思路来解析C代码。我认为可以使用函数以及if
和while
运算符来实现它。您可以过滤未分配=
的代码段。使用一些更复杂的代码,您可以处理包含=
作为它们一部分的运算符,并且,如果需要,也可以将它们包装在空格中。
另外,您可以使用正则表达式在代码中的注释和字符串之间引入空格。这样的正则表达式看起来像(?<=^|\w|\d) ?= ?(?<=^|\w|\d)
,被=
替换。但是我仍然不确定这个正则表达式是否可以涵盖主要的极端情况。
关于python - Python-替代C程序,但跳过注释,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/36270756/