我正在嘗試創建一個腳本,允許我在Linux內核中自動清理一些內容。我的議程上的第一件事是刪除對單個語句塊不必要的if語句(c樣式)的大括號({})。現在我可以用Python我到工作狀態我正則表達式的小知識試過的代碼,如:Python搜索和替換文件
if (!buf || !buf_len) {
TRACE_RET(chip, STATUS_FAIL);
}
和腳本把它變成:
if (!buf || !buf_len)
TRACE_RET(chip, STATUS_FAIL);
,這是我想要的東西,但是當我在真正的源文件上嘗試它,它似乎隨機選擇一個if語句並將其刪除,並且它具有多個語句塊,並且通常在其他語句或long語句中刪除遠離程序的結尾括號。
所以有人可以幫助我讓腳本只觸及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()
感謝
不要用正則表達式解析C代碼。在單行'if'語句中使用大括號是一種很好的做法。 – JBernardo 2012-08-14 01:07:26