我试图制作一个脚本来让我在 linux 内核中自动清理一点。我议程上的第一件事是删除单语句块不需要的 if 语句(c 样式)上的大括号({})。现在,我用我对python中正则表达式的一点了解尝试的代码进入了工作状态,例如:
if (!buf || !buf_len) {
TRACE_RET(chip, STATUS_FAIL);
}
脚本将其变成:
if (!buf || !buf_len)
TRACE_RET(chip, STATUS_FAIL);
这就是我想要的,但是当我在真实的源文件上尝试它时,它似乎随机选择一个 if 语句并将其删除,它的开头大括号并且它有多个语句块,并且它通常在一个 else 语句中删除程序很远的结尾大括号或长 if 语句。
所以有人可以帮我让脚本只触及 if 语句,如果它有一个块语句并正确删除它对应的开始和结束括号。
正确的脚本如下所示:
from sys import argv
import os
import sys
import re
get_filename = argv[1]
target = open(get_filename)
rename = get_filename + '.tmp'
temp = open(rename, 'w')
def if_statement():
look=target.read()
pattern=r'''if (\([^.)]*\)) (\{)(\n)([^>]+)(\})'''
replacement=r'''if \1 \3\4'''
pattern_obj = re.compile(pattern, re.MULTILINE)
outtext = re.sub(pattern_obj, replacement, look)
temp.write(outtext)
temp.close()
target.close()
if_statement()
提前致谢