-1

基本的に、正規表現の一致をファイルで検索し、各一致を新しく作成されたテキスト ファイル (つまり、match_01.txt、match_02.txt、match_03.txt など) に保存するプログラム/スクリプトが必要です。注意: 複数行のマッチングをサポートする必要があります!

編集 :

これは、Joshaのヘルプを使用して試したものです(thx:):

これを試すとエラーが発生します

Python スクリプト:

import re
pattern = re.compile(r'(?s)(?<=Sample)(.*?)(?=EndSample)', flags=re.S)
with open('test.txt', 'r') as f:
    matches = pattern.findall(f.read())

for i, match in enumerate(matches):
    with open('Split/match{0:04d}.txt'.format(i), 'w') as nf:
        nf.write(match)

コマンド・プロンプト:

C:\Test\python test.py
Traceback (most recent call last):
  File "test.py", line 31, in <module>
    nf.write(match)
TypeError: expected a character buffer object

test.txt は次のようになります。

サンプル A1 ... ... ... ... ... EndSample

サンプル B4 ... ... ... ... ... EndSample

サンプル X6 ... ... ... ... ... EndSample

そのため、"Sample" と "EndSample" (間に何百行もある) の間のすべてを一致させ、それぞれの一致を独自の txt ファイルに書き込む必要があります。これまでのところ、正規表現パターンが ie の場合にのみ機能します。"サンプル"。15 個の一致があり、Split フォルダーに 15 個の txt ファイルが作成されますが、それらにはすべて Sample という単語だけが含まれ、それ以上は含まれていません。マルチラインはまだ機能していません..そして、私の正規表現がこれである場合:

(?s)(サンプル)(.*?)

次に、上記と同じエラーも表示されます。それは好きではないようなものです (.*?) 奇妙な..?

4

1 に答える 1

0

Python の場合 (一致が複数の行にまたがっていないと仮定します):

import re
pattern = re.compile(r'(?s)(?<=Sample)((?:.+?)?)(?=EndSample)', flags=re.S)  # Your regex goes here
with open('path/to/your/file.txt', 'r') as f:
    matches = pattern.findall(f.read())

for i, match in enumerate(matches):
    with open('/path/to/your/match{0:04d}.txt'.format(i), 'w') as nf:
        nf.write(match)
于 2013-10-10T00:00:55.500 に答える