我需要一个python regex来将文件分割成多个分隔符(开头,结尾)

时间:2019-02-06 20:59:36

标签: python regex

我正在使用Python。我想通过使用分隔符“ BEGIN”和“ END”来拆分包含n个部分的文件。

文件包含:

BEGIN
ABC ABC ABC
END
BEGIN
XYZ
XYZ
END
BEGIN
A B C
END

使用上面的文件,我希望将其作为输出:

文件1:

BEGIN
ABC ABC ABC
END

文件2:

BEGIN
XYZ
XYZ
END

文件3:

BEGIN
A B C
END

我认为可以使用REGEX来完成此操作,但是在上面的示例中,我找不到能够识别3个组(BEGIN ... END)的模式。

如果您能帮助我,我将不胜感激。

谢谢

2 个答案:

答案 0 :(得分:0)

您可以将re.findallre.DOTALL标志一起使用,以允许.匹配换行符,并与re.MULTILINE标志一起使用,以允许^和{{1} }以匹配行的开头和结尾,并假设输入文件的内容存储在变量$中:

content

答案 1 :(得分:-1)

您可以使用类似的内容:

Sub Demo()
    Dim lo As ListObject
    Dim SearchRange As Range
    Dim LookupRange As Range
    Dim SearchTerm As Variant
    Dim LookupItem As Variant
    Dim idx As Variant

    Set lo = Worksheets("Tables").ListObjects("Table1")
    Set SearchRange = lo.ListColumns("Column2").DataBodyRange
    Set LookupRange = lo.ListColumns("Column8").DataBodyRange

    SearchTerm = "YourSearchTerm"
    idx = Application.Match(SearchTerm, SearchRange, 0)
    If Not IsError(idx) Then
        LookupItem = LookupRange.Cells(idx, 1)
        ' use the result as you wish
        Debug.Print LookupItem
    Else
        ' SearchTerm not found.  What now?
    End If

    'For completeness, heres how to reference a range of columns
    Dim VLookupRange As Range
    Set VLookupRange = lo.Parent.Range(lo.ListColumns("Column2").DataBodyRange, lo.ListColumns("Column8").DataBodyRange)
    Debug.Print VLookupRange.Address

End Sub

上面将创建3个文件

import re
with open('original.txt') as f:
    s = f.read()

m = re.findall("BEGIN.*?END", s, re.DOTALL)

n = 1
for x in m:
    with open(f"{n}.txt", "w", encoding='utf8' ) as f:
        f.write(x)
    n+=1

包含文字1.txt 2.txt 3.txt