正则表达式 - 提取函数体

1 投票
2 回答
1640 浏览
提问于 2025-04-15 23:59

在Python脚本中,对于一些C++代码中以特定形式定义的方法:

return_value ClassName::MethodName(args)
{MehodBody} 

我需要提取三个部分:类名、方法名和方法体,以便进行进一步处理。找到并提取类名和方法名比较简单,但有没有什么简单的方法可以提取方法的主体呢?尤其是里面可能会有很多'{''}'?或者说正则表达式不适合处理这种情况?

2 个回答

1

我建议你使用解析模块,而不是正则表达式,因为解析模块可以处理多行函数、不同的缩进,并且在遇到格式错误的输入时会停止,这样你就能更好地管理这些情况。我一直遵循的一个原则就是“尽量避免使用正则表达式”,因为它们通常会带来更多麻烦。


编辑:哦,好的。我误解了你的问题。我以为你想解析Python代码。我查了一下,发现这个,但它只支持C语言。也许你可以在此基础上扩展一下?C++的语法可以在《C++编程语言》这本书里找到。

3

在编程中,有时候我们需要处理一些复杂的任务,比如计算、数据处理等等。为了让这些任务更简单,我们可以使用一些工具和方法来帮助我们。

例如,假设你在写一个程序,需要从一个列表中找到某个特定的数字。你可以用循环来逐个检查每个数字,看看它是不是你要找的那个。这就像在一堆书里找一本特定的书,你需要一页一页地翻。

但是,如果你有很多书,逐个翻找就会很麻烦。这时候,你可以把书按类别整理好,或者用索引来快速找到你想要的书。编程中也有类似的技巧,比如使用函数、库或者框架,这些都是为了让你的工作更高效。

总之,编程就像解决一个个小问题,通过合理的方法和工具,可以让复杂的事情变得简单。

>>> s = """return_value ClassName::MethodName(args)
{MehodBody {} } """
>>> re.findall(r'\b(\w+)::(\w+)\([^{]+\{(.+)}', s, re.S)
[('ClassName', 'MethodName', 'MehodBody {} ')]

撰写回答