循环文件,当找到正则表达式匹配时将其附加到另一行,直到找到下一个迭代

问题描述 投票:0回答:1

我已经尝试了几种不同的方法,并且仍在努力,但也许为了这个项目的时间,我可以很快得到指示。任何建议表示赞赏。

循环遍历文件,每当我看到 ===r(xxxx).(xxxx).(xxxx) 时,我需要将 r(xxxx).(xxxx).(xxxx) 附加到包含单词 remark 的每一行直到它到达包含备注的下一行 =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= -=,然后冲洗并重复直到文件末尾...

Example file .txt to loop:
access-list r1999-outside-in remark =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
access-list r1999-outside-in remark ===r9920.4001.886
access-list r1999-outside-in remark Access from Test Network
access-list r1999-outside-in extended permit tcp xxx.xxx.xxx.xxx 255.255.255.128 x.x.32.160 255.255.255.248 eq 4343 
access-list r1999-outside-in remark auth1.this.that
access-list r1999-outside-in extended permit ip host x.x.33.39 x.x.32.160 255.255.255.248 
access-list r1999-outside-in remark Access to Mgmt from  VPN
access-list r1999-outside-in extended permit tcp object-group VPN-NETWORK-NO-PROXY x.x.x.x 255.255.255.248 eq 4343 
access-list r1999-outside-in remark =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
access-list r1999-outside-in remark ===r9930.9975.1296 - Wireless Controllers
access-list r1999-outside-in extended permit object-group TFTP host x.x.33.203 x.x.33.160 255.255.255.248 
access-list r1999-outside-in remark Access to Mgmt from  VPN
access-list r1999-outside-in extended permit tcp object-group VPN-NETWORK-NO-PROXY x.x.x.x 255.255.255.248 eq 4343 
access-list r1999-outside-in remark =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
access-list r1999-outside-in remark ===r9940.4001.886 - Wireless Controllers
access-list r1999-outside-in remark Access from Test Network
access-list r1999-outside-in extended permit tcp xxx.xxx.xxx.xxx 255.255.255.128 x.x.32.160 255.255.255.248 eq 4343 
access-list r1999-outside-in extended permit tcp 10.x.x.0 255.255.252.0 x.x.32.160 255.255.255.248 eq 4343 
access-list r1999-outside-in remark =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=


带有附加文本的块的片段

access-list r1999-outside-in remark =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
access-list r1999-outside-in remark ===r9920.4001.886
access-list r1999-outside-in remark Access from Test Network r9920.4001.886
access-list r1999-outside-in extended permit tcp xxx.xxx.xxx.xxx 255.255.255.128 x.x.32.160 255.255.255.248 eq 4343 
access-list r1999-outside-in remark auth1.this.that r9920.4001.886
access-list r1999-outside-in extended permit ip host x.x.33.39 x.x.32.160 255.255.255.248 
access-list r1999-outside-in remark Access to Mgmt from  VPN r9920.4001.886
access-list r1999-outside-in extended permit tcp object-group VPN-NETWORK-NO-PROXY x.x.x.x 255.255.255.248 eq 4343 
access-list r1999-outside-in remark =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
access-list r1999-outside-in remark ===r9930.9975.1296

do the same thing here we did above....

access-list r1999-outside-in remark =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=

为了变得更复杂一点,我的下一个任务是将所有 r(xxxx) 替换为新单词。

我有一个文本文件,其中包含新的引用数据,如下所示...接下来我可以关注这一点,但任何建议也很好。 r1130,新词 r1140,新词

我正在循环并获得第一个正则表达式结果,但之后遇到问题。对于接下来的几种方法来说,只要有一点建议就很好了。

with open("file.txt", "r") as file:
# Create an empty list to store the lines
    lines = []

    # Iterate over the lines of the file
    for line in file:
        line = line.strip()
        # Append the line to a list
        lines.append(line)
        # regex to pull out r(xxxx).(xxxx).(xxxx)
        y = re.search("(r\d{4}.\d+.\w+)", line)
        if y != None:
            print(y)
python loops while-loop
1个回答
0
投票

我想这就是你所追求的。这里不需要正则表达式。您只需跟踪当前的后缀,当您找到 =-=-=-= 时重置它,并在找到“remark ===”时设置一个新后缀。

suffix = ""
with open("x.txt") as file:
# Create an empty list to store the lines
    # Iterate over the lines of the file
    for line in file:
        line = line.strip()
        if '=-=-=-=' in line:
            suffix = ''
            print(line)
        elif 'remark ===' in line:
            suffix = ' ' + line.split()[3]
            print(line)
            continue
        elif 'remark' in line:
            print( line + suffix )
        else:
            print(line)

输出:

access-list r1999-outside-in remark =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
access-list r1999-outside-in remark ===r9920.4001.886
access-list r1999-outside-in remark Access from Test Network ===r9920.4001.886
access-list r1999-outside-in extended permit tcp xxx.xxx.xxx.xxx 255.255.255.128 x.x.32.160 255.255.255.248 eq 4343
access-list r1999-outside-in remark auth1.this.that ===r9920.4001.886
access-list r1999-outside-in extended permit ip host x.x.33.39 x.x.32.160 255.255.255.248
access-list r1999-outside-in remark Access to Mgmt from  VPN ===r9920.4001.886
access-list r1999-outside-in extended permit tcp object-group VPN-NETWORK-NO-PROXY x.x.x.x 255.255.255.248 eq 4343
access-list r1999-outside-in remark =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
access-list r1999-outside-in remark ===r9930.9975.1296 - Wireless Controllers
access-list r1999-outside-in extended permit object-group TFTP host x.x.33.203 x.x.33.160 255.255.255.248
access-list r1999-outside-in remark Access to Mgmt from  VPN ===r9930.9975.1296
access-list r1999-outside-in extended permit tcp object-group VPN-NETWORK-NO-PROXY x.x.x.x 255.255.255.248 eq 4343
access-list r1999-outside-in remark =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
access-list r1999-outside-in remark ===r9940.4001.886 - Wireless Controllers
access-list r1999-outside-in remark Access from Test Network ===r9940.4001.886
access-list r1999-outside-in extended permit tcp xxx.xxx.xxx.xxx 255.255.255.128 x.x.32.160 255.255.255.248 eq 4343
access-list r1999-outside-in extended permit tcp 10.x.x.0 255.255.252.0 x.x.32.160 255.255.255.248 eq 4343
access-list r1999-outside-in remark =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
© www.soinside.com 2019 - 2024. All rights reserved.