当前位置: 首页 > 面试题库 >

使用正则表达式从源文件中删除注释

池麒
2023-03-14
问题内容

我正在编写一个程序来自动编写一些C代码,(我正在编写将字符串解析为同名枚举)C对字符串的处理不是很好。所以有些人一直在me我尝试python。

我做了应该删除C风格的功能/* COMMENT */,并//COMMENT 从字符串:下面是代码:

def removeComments(string):
    re.sub(re.compile("/\*.*?\*/",re.DOTALL ) ,"" ,string) # remove all occurance streamed comments (/*COMMENT */) from string
    re.sub(re.compile("//.*?\n" ) ,"" ,string) # remove all occurance singleline comments (//COMMENT\n ) from string

所以我尝试了这段代码。

str="/* spam * spam */ eggs"
removeComments(str)
print str

它显然什么也没做。

关于我做错了什么建议?

有句话我已经听过几次了:

如果您有问题,并尝试使用Regex解决它,则会遇到两个问题。

编辑:回顾这几年后。(经过更多的解析经验之后)

我认为正则表达式可能是正确的解决方案。而且这里使用的简单正则表达式“足够好”。我可能在这个问题上没有足够强调。这是针对单个特定文件的。没有棘手的情况。我认为,对于正则表达式而言,使文件解析得足够简单要比将正则表达式复杂化为难以理解的符号汤要少得多。


问题答案:

re.sub 返回一个字符串,因此将代码更改为以下内容将得到结果:

def removeComments(string):
    string = re.sub(re.compile("/\*.*?\*/",re.DOTALL ) ,"" ,string) # remove all occurrences streamed comments (/*COMMENT */) from string
    string = re.sub(re.compile("//.*?\n" ) ,"" ,string) # remove all occurrence single-line comments (//COMMENT\n ) from string
    return string


 类似资料:
  • 问题内容: 问题: 有人可以给我一个有效的正则表达式(C#/ VB.NET),可以从SQL语句中删除单行注释吗? 我的意思是这些评论: 不是那些 因为我已经可以处理星级评论。 我做了一个小解析器,当它们在行的开头时删除了这些注释,但是它们也可以在代码之后或更糟的地方,在SQL字符串中。 那些注释也应该被删除(SQL字符串中的那些注释除外)。当然-如果可能的话)。 令人惊讶的是我没有使正则表达式工作

  • 通常,当我想在python中使用正则表达式删除两个字符串之间的文本时,我会这样做: 其中 是我的文本,我使用上面的代码删除 z1 和 AA 之间的所有内容(包括 和 )。但是现在我正在努力为以下方面做同样的事情: 我有下面的字符串(来自乳胶。txt文件): 我的目标是替换所有的东西,从到最后一行的最后一个。我尝试了几个正则表达式组合,如和其他组合,但没有成功…我做错了什么?

  • 问题内容: 如何在Java中从给定的字符串中删除所有方括号(“ []”)? 在这种情况下将使用什么正则表达式? 问题答案: 使用这个:

  • 问题内容: 在Linux中使用命令时,可以添加一个使用emacs regualr表达式进行匹配的标志。 我想查找除文件和文件以外的所有文件。在这种情况下,正则表达式是什么? 谢谢 问题答案: 您在这里不需要正则表达式。您可以使用与和选项: 上述内容的一种更为简洁(但可读性较差)的版本是:

  • 问题内容: 我将如何编写一个正则表达式来删除所有以#开头并在该行结束处停止的注释-但同时要排除前两行,即 和 问题答案: 您可以通过使用解析Python代码来删除注释。以下是从docs对该示例进行的稍微修改的版本: 例如: 如果script.py包含 然后的输出是

  • 问题内容: 假设我想使用正则表达式删除字符串中的所有重复字符(特定字符)。这很简单- 如果我想用相应的字符替换所有重复的字符(即a,z)怎么办?我该怎么做呢? 注意: 我知道可以使用哈希表或某些O(n ^ 2)算法更好地解决这种删除重复项的方法,但是我想使用正则表达式进行探索 问题答案: 的周围的指定 捕获组 ,然后将(一个 反向引用 在图案和替换两者)指的是第一个捕获组的内容。 因此,正则表达式