-1

我基本上需要一个程序/脚本来搜索正则表达式匹配的文件,然后将每个匹配保存到新创建的文本文件(即 match_01.txt、match_02.txt、match_03.txt 等)。注意:它必须支持多行匹配!

编辑 :

这是我尝试使用 Josha 的帮助(谢谢 :):

尝试此操作时出现错误

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 回答