получить содержимое того, что находится между вторым набором кавычек

#python #python-3.x

#питон #python-3.x #python

Вопрос:

Я только что запустил 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"... so не в первом наборе кавычек, а во втором.

Вот мой код:

 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"...

Комментарии:

1. Почему вы используете регулярные выражения? Вы можете разделить строку, а затем выбрать четвертый столбец.

Ответ №1:

Здесь вам не нужны регулярные выражения, поскольку ваш файл уже хорошо сформирован:

 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']
  

Ответ №2:

Для этого вам не нужно регулярное выражение, просто используйте str.split() функцию:

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

Вы разбиваете каждую входящую строку на двойные кавычки " . Четвертая группа соответствия — это то, что вы пытаетесь получить (помните, индексы Python основаны на 0).