regex 正则表达式适用于除Python之外的所有内容

kpbpu008  于 2023-04-07  发布在  Python
关注(0)|答案(1)|浏览(121)

我尝试使用python浏览文件列表并提取配置块。文件格式如下:

pon-onu-mng gpon-onu_1/2/2:8
  ip-host 2 dhcp-enable true ping-response true traceroute-response true
  dhcp-ip ethuni eth_0/1 from-internet
  dhcp-ip ethuni eth_0/2 from-internet
  wifi disable
#
pon-onu-mng gpon-onu_1/2/2:9
  ip-host 2 dhcp-enable true ping-response true traceroute-response true
  dhcp-ip ethuni eth_0/1 from-internet
  dhcp-ip ethuni eth_0/2 from-internet
  wifi disable
#
pon-onu-mng gpon-onu_1/2/2:10
  ip-host 2 dhcp-enable true ping-response true traceroute-response true
  dhcp-ip ethuni eth_0/1 from-internet
  dhcp-ip ethuni eth_0/2 from-internet
  wifi disable
#

在这些之前和之后还有其他行,但我需要的所有行都以'pon-onu-mng gpon-onu'开始,直到#符号。我需要捕获包括两个“终止符”在内的整个块。
我使用以下正则表达式来查找块:pon-onu-mng.gpon-onu(.*?|[\S\s]?)#我可以将其插入python的re中而不会出现任何错误(这给我带来了问题),但它返回一个空列表。我在www.example.com上测试了该表达式regex101.com,它找到了我需要的所有内容。到目前为止,我的代码如下。有人能帮助我找出我做错了什么吗?

#! /usr/bin/python3

import os
from optparse import OptionParser
import re
import pandas as pd

configFileListRaw = os.system('find . -name startrun.dat > configFileList.txt')
configFileListRaw = open('configFileList.txt').readlines()
os.system('rm configFileList.txt')

pattern = re.compile(r'pon-onu-mng.gpon-onu(.*?|[\S\s]?)#')
#match = re.findall(pattern,"pon-onu-mng gpon-onu")
print(pattern)

for i in configFileListRaw:
    file = open (str(i).strip("\n"))
    match = re.findall(r'pon-onu-mng.gpon-onu(.*?|[\S\s]?)#',file.read(),re.MULTILINE | re.DOTALL)
    print (match)

Regex101:(这里应该有一张图片,但我认为它只是附加了它)
运行脚本的输出。注意-re.compile(第二行)只是我放入的一个print语句,以确保re.compile编译的是我预期的内容。正如你所看到的,我不再使用re.compile,我直接将正则表达式放入re.findall函数:

tymier@FL-ENG026-LT:/mnt/scriptdev/gitlab/zte-phone-parser/2023-04-05-02-00-16/10.57.4.227$ ../../zte_phone_parser.py
re.compile('pon-onu-mng.gpon-onu(.*?|[\\S\\s]?)#')
[]

我试着在谷歌上搜索,直到奶牛回家。我能够弄清楚我需要MULTILINE或DOTALL,也许两者都需要,但老实说不确定。

9avjhtql

9avjhtql1#

我认为这个问题与我如何阅读文件有关。我重新开始,专注于读取文件并搜索它。我终于能够让以下内容工作:

#! /usr/bin/python3
import re

file = open('startrun.dat','r').read()
match = re.findall(r'pon-onu-mng.gpon-onu(.*?|[\S\s]?)!',file,re.DOTALL)

for i in match:
    print (i)

相关问题