正则表达式“(?s-i)^ ST.I_FAIL:。+?\ RST.VND_PORT:。+?”的python等价物是什么?

我有文本文件“ Test_input.txt”,其中包含如下所示的数据:

SAS I:
    ST.I_FAIL:
    (I) @LINE: 9
    >>>     
    >>> Value
ST.VND_PORT:
TEXT:<<SOIS>>.STV:SV


SAS II:
    ST.I_FAIL:
    (I) @LINE: 20
    >>>     20
    >>> compare
ST.VND_PORT:
TEXT:<<SOIS>>.STV:SV

SAS III:
    ST.I_FAIL:
    (I) @LINE: 50
    >>>     20
    >>> 50
    >>>50
    >>>50
ST.VND_PORT:
TEXT:<<SOIS>>.STV:SV

输出文件应按如下所示进行修改(“ Test_output.txt”):

SAS I:
TEXT:<<SOIS>>.STV:SV

SAS II:
TEXT:<<SOIS>>.STV:SV

SAS III:
TEXT:<<SOIS>>.STV:SV

有900个案例(从SAS I到SAS 900)。

它们每个都有错误,如以上文本所示。要从“ Test_input.txt”中手动删除所有错误,将花费大量时间。 因此,我使用了正则表达式,如下所示,它在notepad ++工具中运行良好:

```(?s-i)^ST.I_FAIL:.+?\RST.VND_PORT:.+?```

从“ Test_input.txt”中删除执行类似操作的错误行的python等价代码是什么?

评论
老实人
老实人

如果您真正想捕获的只是包含“ SAS ...”和“ TEXT:...”的行,并且总共只有〜900行。我会尝试如下所示的正则表达式来匹配它们:

import re
your_string = """
SAS I:
    ST.I_FAIL:
    (I) @LINE: 9
    >>>     
    >>> Value
ST.VND_PORT:
TEXT:<<SOIS>>.STV:SV


SAS II:
    ST.I_FAIL:
    (I) @LINE: 20
    >>>     20
    >>> compare
ST.VND_PORT:
TEXT:<<SOIS>>.STV:SV

SAS III:
    ST.I_FAIL:
    (I) @LINE: 50
    >>>     20
    >>> 50
    >>>50
    >>>50
ST.VND_PORT:
TEXT:<<SOIS>>.STV:SV
"""
with open('Test_output.txt', 'w') as outfile:
    for pair in re.findall(r'(SAS.*?:).*?(TEXT.*?)\n',s,re.M|re.S):
        outfile.write(''.join([pair[0],'\n',pair[1],'\n']))

希望这会有所帮助。

点赞
评论