-1

我正在尝试按功能块拆分 C 程序。例如,

我尝试使用正则表达式库并尝试按(){. 但是没有用。不知道从哪里开始。

string = """
int firt(){
    if () { 

    }
}

customtype second(){
    if () { 

    }
    for(){

    }
}
fdfndfndfnlkfe
    """

我希望结果是一个列表,其中每个功能块作为一个元素:['int first(){ ... }', 'customtype second(){....}']

我尝试了以下但得到None

import regex
import re

reg = r"""^[^()\n]+\([^()]*\)\s*
\{
    (?:[^{}]*|(?R))+
\}"""

print(regex.match(reg, string))
4

2 回答 2

0

解析源代码是一项相当困难的任务。像Bison这样的软件会在 C、C++ 和 Java 中生成源代码解析器(C 代码可以在 Python 中使用),但您不太可能创建正则表达式来解决这个问题(至少很容易)。

于 2019-07-26T03:02:14.497 回答
0

首先:不要 - 改用解析器。
其次,如果您坚持并想知道为什么应该使用解析器,请看一下这种递归方法(仅适用于较新的regex模块):

^[^()\n]+\([^()]*\)\s*
\{
    (?:[^{}]*|(?R))+
\}

在 regex101.com 上查看演示。这将与包含花括号的注释中断。


Python这将是

import regex as re

reg = re.compile(r"""^[^()\n]+\([^()]*\)\s*
\{
    (?:[^{}]*|(?R))+
\}""", re.VERBOSE | re.MULTILINE)

for function in reg.finditer(string):
    print(function.group(0))
于 2019-07-26T06:25:48.730 回答