【发布时间】:2014-09-09 01:36:01
【问题描述】:
我试图在 c 文件中查找 c 样式的 cmets,但如果恰好在引号内有 //,我会遇到麻烦。这是文件:
/*My function
is great.*/
int j = 0//hello world
void foo(){
//tricky example
cout << "This // is // not a comment\n";
}
它将与该 cout 匹配。这是我目前所拥有的(我已经可以匹配 /**/ cmets)
fp = open(s)
p = re.compile(r'//(.+)')
txt = p.findall(fp.read())
print (txt)
【问题讨论】:
-
用正则表达式解析 C 是不可行的。也许使用其他东西,比如 GCC-XML 或 CLang 前端。
-
我把它想象成一个 txt 文件或一个字符串
-
你的想象不会改变现实。在这种情况下,它实际上可以使用正则表达式(非常时尚,Casimir!),但在某些情况下,正则表达式要么有很多困难,要么完全无法做到(匹配括号是一个经典的例子,除非你'正在使用,比如说,Oniguruma,它有非常不规则的扩展)。这就像,“我可以用叉子吃汤吗?我把它想象成一顿饭。”你当然可以。这真的是最好的方法吗?