注释中的字符串和字符串中的注释

时间:2010-04-04 20:40:41

标签: python regex

我正在尝试使用Python和Regex计算C代码中包含的注释中的字符,但没有成功。我可以先删除字符串以删除字符串中的注释,但这也会删除注释中的字符串,结果将是错误的。有没有机会通过使用正则表达式来评论不匹配评论中的字符串,反之亦然?

3 个答案:

答案 0 :(得分:6)

不,不是真的。

正则表达式不是解析您描述的嵌套结构的正确工具;相反,你需要解析C语法(或者你感兴趣的“dumb子集”),你可能会发现正则表达式对此很有帮助。一个相对简单的状态机有三种状态(CODE,STRING,COMMENT)可以做到。

答案 1 :(得分:2)

正则表达式并不总是real parser的替代。

答案 2 :(得分:2)

您可以通过搜索正则表达式删除所有不在注释中的字符串:

'[^'\r\n]+'|(//.*|/\*(?s:.*?)\*/)

并替换为:

$1

基本上,这会搜索匹配字符串或注释的正则表达式string|(comment),捕获注释。如果字符串匹配则替换为空或者如果评论匹配则为评论。

虽然正则表达式不能替代真正的解析器,但您可以通过创建一个巨大的正则表达式来快速构建一个基本的解析器,该正则表达式交替您感兴趣的所有标记(在这种情况下为注释和字符串)。如果您正在编写一些代码来处理注释,而不是字符串中的那些代码,则迭代上述正则表达式的所有匹配项,并计算第一个捕获组中的字符(如果它参与了匹配)。