获取第二组引号之间的内容

时间:2014-07-02 15:10:41

标签: python python-3.x

我刚开始使用python,我尝试在引号之间打印内容

我文件中的文字:

set address "Trust" "45.200.0.0/16" 45.200.0.0 255.255.0.0
set address "Trust" "45.200.1.80/32" 45.200.1.80 255.255.255.255
set address "Trust" "ad.corp" 45.200.1.98 255.255.255.255 "active directory server"
set address "Trust" "Infrasun" 45.200.1.2 255.255.255.255 "DNS/DHCP/all that jazz"
set address "Trust" "NAC Team /16 Subnet" 45.200.0.0 255.255.0.0
set address "Untrust" "207.179.9.4/32" 207.179.9.4 255.255.255.255
set address "Untrust" "Laptop Net" 45.128.0.0 255.255.0.0 "Laptop net for use by team"
set address "Untrust" "VoIP Team Subnet" 45.210.0.0 255.255.0.0

我想打印"45.200.0.0/16","45.200.1.80/32","ad.corp","Infrasun"...所以不在第一组引号中,而是第二组。

这是我的代码:

mon_fichier = open ("conf.cfg","r")
fichier = mon_fichier.read().splitlines()

import re

for ligne in fichier:

    if re.match('set address', ligne):      
        expression = re.compile('(?<=")(?P<value>.*?)(?=")')
        match = expression.search(ligne)
        print match.group('value')

我只打印出来:

Trust
Trust
Trust
Trust
Trust
Untrust
Untrust
Untrust

但正如我所说,我需要:"45.200.0.0/16","45.200.1.80/32","ad.corp","Infrasun"...

2 个答案:

答案 0 :(得分:2)

由于您的文件已经很好地形成,因此您不需要正则表达式:

import csv

with open('somefile.txt', 'r') as f:
   reader = csv.reader(f, delimiter=' ')
   for row in reader:
       print(row[3])

如果您正在学习正则表达式,请尝试以下方法:

>>> import re
>>> exp = r'^set address "\w+" "(.*?)".*?$'
>>> re.findall(exp, i, re.M)
['45.200.0.0/16', '45.200.1.80/32', 'ad.corp', 'Infrasun', 'NAC Team /16 Subnet', '207.179.9.4/32', 'Laptop Net', 'VoIP Team Subnet']

答案 1 :(得分:0)

您不需要使用正则表达式,只需使用str.split()函数:

for ligne in fichier:
    print(ligne.split('"')[3])

您正在拆分双引号"上的每个传入行。第四个匹配组是你想要得到的(记住,Python索引是从0开始的)。