1

ファイルのリストで次のヘッダーを見つけて、自分のものに置き換えようとしています。

/*************************************************************************************
 * Company: XXX
 * File Name: myfile1.c
 * Author: MyName
 * Date: 30/12/2011
 * Operating Environment: XXX
 * Compiler with Version Number:
 * Description: This file contains an array which returns a structure having API characteristics.
 * Version:
 ***********************************************************************************/

基本的に、ディレクトリのリストを走査し、すべてのファイルで文字列置換を行う python プログラムを作成しようとしています。以下は私のプログラムのコードです:

import sys
import os
import re
correctlicheader = r'''
/* <MY-HEADER>
 *
 */
'''

def changelic():
   startdir = sys.argv[1]
   for root, dirs, files in os.walk(startdir):
      for file in files:
         actualfilename =  os.path.join(root, file)
         print("Reading file: %s" %(actualfilename))
         f = open(actualfilename, 'r')
         read_data = f.read()             
         #try replacing the incorrect header
         p = re.compile("<MY-REGULAREXPRESSION-HERE>")
         changed_data = p.sub(correctlicheader, read_data, 1)
         f.close()
         f= open(actualfilename, 'w')
         f.write(changed_data)
         f.close()
    print("End")

if __name__ == '__main__':
   changelic()

問題は、「MY-REGULAREXPRESSION-HERE」が正しくないことです。私は試した

p = re.compile("/\*[\*]*\r\n[ *[a-zA-Z0-9:/\.]+\r\n]*\*/")

および上記のさまざまな順列。しかし、私は得続けます

matched = p.match(read_data)
None

「MY-REGULAREXPRESSION-HERE」を置き換える提案はありますか? また、 open(read-mode)-close-open(write-mode)-write なしで同じことを行うより良い方法はありますか?

4

1 に答える 1

1

http://ostermiller.org/findcomment.htmlには、c++コメントを検索するための正規表現があります。

に変更<MY-REGULAREXPRESSION-HERE>する/\*([^*]|[\r\n]|(\*+([^*/]|[\r\n])))*\*+/と正しいことが行われます。

私は自分のマシンであなたのコードを実行しました、そしてそれは予想通りに実行します。

プッシュしてくれた@Wilduckに感謝します。:)

于 2013-01-31T17:31:08.397 に答える