正規表現を用いた特定の文字列がマッチする位置の取得
「QC」もしくは「QF」で始まり、「KL」で終わる箇所を表示させるプログラムを作成したい。複数箇所あり、すべて抜き出したい。
環境等
正規表現を用いてpythonスクリプトを作成
・python3.8
・mac OS または windows上で使用
これまでに作成できたスクリプト
python
1import sys 2import re 3 4pat1="QC.*?KL" 5pat2="QC.*KL" 6pat3="QF.*?KL" 7pat4="QF.*KL" 8 9f=open(sys.argv[1]) 10lines=f.read() 11f.close() 12 13mpat1 = re.finditer(pat1,lines) 14for match in mpat1: 15 print(match.span()) 16 17mpat2 = re.finditer(pat2,lines) 18for match in mpat2: 19 print(match.span()) 20 21mpat3 = re.finditer(pat3,lines) 22for match in mpat3: 23 print(match.span()) 24 25mpat4 = re.finditer(pat4,lines) 26for match in mpat4: 27 print(match.span())
問題点
この正規表現の場合は、最短一致と最長一致の位置のみの抽出となり、「QC」もしくは「QF」で始まり、「KL」で終わる箇所を全て抜き出すことができない。全てを抽出するにはどのように表記すべきか教えてください。
望ましい条件がわからないのですが、例えば
"QCQCQCKLKLKL"
という文字列だと、全てのQCとKLの組み合わせ合計9種の一致を抽出したい、ということでしょうか?
正規表現は「重複しない」マッチを探し出す手段だと思うのですが、今回のご質問は「重複する」マッチを全て探し出したいということでしょうか?だとすると正規表現から離れた方がよいかもです。最短最長以前の問題かと思います。
コメントありがとうございます。
その通りでして、お示し頂いたの条件の場合は合計9種類の一致を出したい、ということです。
おっしゃる通りで、正規表現ではかなり遠回りになることが分かりましたので別の方法も検討していきたいと思います。
ありがとうございました。
回答1件
あなたの回答
tips
プレビュー