将每个正则表达式匹配保存到新文本文件(批处理)?

时间:2013-10-09 23:38:56

标签: regex extract

我基本上需要一个程序/脚本来搜索文件以进行正则表达式匹配,然后将每个匹配保存到新创建的文本文件(即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)(样品)(。*?)

然后它也给了我与上面相同的错误。就像它不喜欢(。*?)奇怪......?

1 个答案:

答案 0 :(得分: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)