我想使用Python和正则表达式计算包含在C代码中的评论字符,但没有成功。我可以先删除字符串以摆脱字符串中的注释,但是这也会在注释中删除字符串,并且结果将会很糟糕。有没有机会通过使用正则表达式来匹配注释中的字符串,反之亦然?在评论中的字符串和字符串的评论
0
A
回答
6
不,不是真的。
正则表达式不是像你描述的那样解析嵌套结构的正确工具;相反,你需要解析C语法(或者你感兴趣的“哑子”),你可能会发现正则表达式有帮助。一个相对简单的具有三种状态(CODE,STRING,COMMENT)的状态机就可以做到。
+2
您可能需要字符常量的第四个状态。在C中,文本“/ *”是一个多字符字符常量;它有未定义或实现定义的行为,但不会发起评论。 – 2010-04-04 20:58:49
2
正则表达式并不总是real parser的替代品。
2
可以去掉,通过搜索的正则表达式是不评论的所有字符串:
'[^'\r\n]+'|(//.*|/\*(?s:.*?)\*/)
,并替换:
$1
从本质上讲,这个搜索正则表达式string|(comment)
这匹配字符串或注释,捕获注释。如果匹配字符串,或者评论匹配,那么替换或者不是。
尽管正则表达式不能替代真正的解析器,但您可以通过创建一个巨大的正则表达式来交替所有您感兴趣的令牌(本例中为注释和字符串),从而快速构建一个基本的解析器。如果您要编写一些代码来处理注释,但不是字符串中的代码,请遍历上述正则表达式的所有匹配项,并在第一个捕获组中参与匹配时对其中的字符进行计数。
相关问题
- 1. 评论中的字符串
- 2. 从C#中的字符串中删除HTML标签和评论?
- 3. 如何永远扩展评论和字符串中的yasnippets
- 4. MySQL:在评论字符串中搜索关键字
- 5. 多字符评论字符串Spark CSV阅读器
- 6. PCRE:搜索未评论的字符串或注释块内的字符串?
- 7. 如何评论重组文本中的字符串?
- 8. 防止str_replace评论字符串中的php代码
- 9. 根据xslt中的子元素字符串评论父元素
- 10. 评论字符串中的上下文敏感度
- 11. 如何评论SOAP UI编辑器中的代码字符串?
- 12. 在vim中根据搜索字符串添加评论
- 13. 治愈'字符串“ - ”在评论中不允许。“例外?
- 14. 查找但跳过字符串和评论?
- 15. .NET格式化字符串 - 评论的最佳实践?
- 16. 从C#字符串中删除JavaScript评论#
- 17. 评价在字符串
- 18. 评估字符串arrayName中
- 19. 评论字符串修复emacs ruby模式突出显示
- 20. /**评论。 */VS/*评论* /在Java中
- 21. 在评论中的换行符textareas
- 22. Clojure宏字符串评估
- 23. 评估字符串模板
- 24. 从字符串评估Typescript?
- 25. Excel VBA字符串评估
- 26. Facebook评论:全部评论
- 27. fb:comments - 如何评论评论
- 28. 如何使用Django的评论框架评论评论
- 29. 从评论框(Facebook评论插件)中删除评论
- 30. 评估jmeter中的字符串值
这是不应该使用正则表达式的东西之一,我相信 – 2010-04-04 20:47:09