
田中太郎
正規表現を使って「ここから」「ここまで」テキストを抽出します
概要
テキストで開始となるキーワードから終了のキーワードまでを抽出します。
実行コマンド
./extract_text.py sample.txt "module +.*" "\)\;"
上記を実行すると、
sample.txt
module sample(
input clk,
input reset,
input en,
output logic o_data
);
always_ff @(posedge clk or negedge reset) begin
if (!reset) begin
o_data <= 1'b0;
end else begin
if (en) begin
o_data <= 1'b1;
end
end
end
endmodule
上記のテキストから
input clk,
input reset,
input en,
output logic o_data
こんな感じで出力されます。
コード
extract_text.py
import argparse
import os
import re
def arg_parser():
"""Parser."""
parser = argparse.ArgumentParser()
parser.add_argument("input_path")
parser.add_argument("start_keyword")
parser.add_argument("end_keyword")
return parser.parse_args()
def main(input_path, start_keyword, end_keyword):
"""Main."""
with open(input_path, "r") as f:
input_text = f.readlines()
new_text = []
start_keyword = re.compile(start_keyword)
end_keyword = re.compile(end_keyword)
start_flag = False
end_flag = False
for line in input_text:
if re.search(end_keyword, line):
end_flag = True
if end_flag:
break
if start_flag:
new_text.append(line)
if re.search(start_keyword, line):
start_flag = True
for line in new_text:
print(line, end="")
if __name__ == "__main__":
arg = arg_parser()
main(arg.input_path, arg.start_keyword, arg.end_keyword)
使い方
第1引数は抽出したいテキストファイルです。
第2引数は抽出開始になるキーワードです。
第3引数は抽出終了となるキーワードです。
第2、第3引数は正規表現に対応しています。
コードの解説
arg_parser
def arg_parser():
"""Parser."""
parser = argparse.ArgumentParser()
parser.add_argument("input_path")
parser.add_argument("start_keyword")
parser.add_argument("end_keyword")
return parser.parse_args()
実行時に、テキストファイルと抽出開始キーワード、抽出終了キーワードを与えるためにパーサーを作っています。
main
def main(input_path, start_keyword, end_keyword):
"""Main."""
with open(input_path, "r") as f:
input_text = f.readlines()
new_text = []
start_keyword = re.compile(start_keyword)
end_keyword = re.compile(end_keyword)
start_flag = False
end_flag = False
for line in input_text:
if re.search(end_keyword, line):
end_flag = True
if end_flag:
break
if start_flag:
new_text.append(line)
if re.search(start_keyword, line):
start_flag = True
for line in new_text:
print(line, end="")
start_keyword = re.compile(start_keyword)
で文字列を正規表現対応の文字列に変換しています。
そして、
re.search(start_keyword, line)
でlineに入っている文字列にstart_keywordが含まれているかを探索しています。
まとめ
あるテキストファイルの「ここらか」「ここまで」抽出するスクリプトを作成しました。
ちなみに下記ではテキストファイルの「ここから」「ここまで」の文字列を抽出するするスクリプトです。
前者は行ごとに抽出しますが、後者は行の中から抽出します。
こちらも参考にしてみてください。
コメント