2016-06-16 3 views
0

У меня есть файл с некоторыми строками. Из этих строк я выберу только строки, начинающиеся с xxx. Теперь строки, которая начинается с xxx имеют шаблон следующим образом:извлечение определенных строк из файла с использованием python

xxx:(12:"pqrs",223,"rst",-90) 
xxx:(23:"abc",111,"def",-80) 

Я хочу, чтобы извлечь только строки, которые являются их в первой двойной кавычки т.е. «ФХЦЧ» и «ABC».

Любая помощь с использованием регулярного выражения оценивается.

Мой код выглядит следующим образом:

with open("log.txt","r") as f: 
     f = f.readlines() 
    for line in f: 
     line=line.rstrip() 
     for phrase in 'xxx:': 
      if re.match('^xxx:',line): 
       c=line 
       break 

этот код дает мне ошибку

+0

Вы можете предоставить данные ввод и требуемый выход? –

+0

Почему бы вам не использовать легко понятную функцию разделения? Как вы хотите поддерживать регулярное выражение, которое не удалось создать? – Breeze

ответ

0

Ваш код неправильно отступом. У вашего f = f.readlines() есть 9 пробелов впереди, а for line in f: - 4 пространства. Он должен выглядеть следующим образом.

import re 
list_of_prefixes = ["xxx","aaa"] 
resulting_list = [] 
with open("raw.txt","r") as f: 
     f = f.readlines() 
     for line in f: 
      line=line.rstrip() 
      for phrase in list_of_prefixes: 
       if re.match(phrase + ':\(\d+:\"(\w+)',line) != None: 
        resulting_list.append(re.findall(phrase +':\(\d+:\"(\w+)',line)[0]) 
0
results = [] 
with open("log.txt","r") as f: 
    f = f.readlines() 
    for line in f: 
     if line.startswith("xxx"): 
      line = line.split(":") # line[1] will be what is after : 
      result = line[1].split(",")[0][1:-1] # will be pqrs 
      results.append(result) 

Вы хотите посмотреть на строки, которые начинаются с ххх затем разделить линию на:. Первое, что нужно после: - это то, что вы хотите - до запятой. Тогда ваш результат - это строка, но удалите кавычки. Нет необходимости в регулярном выражении. Строковые функции Python будут точными

0

Хорошо, что вы направляетесь в правильном направлении.

Если вход такой простой, вы можете использовать группы регулярных выражений.

with open("log.txt","r") as f: 
    f = f.readlines() 
    for line in f: 
     line=line.rstrip() 
     m = re.match('^xxx:\(\d*:("[^"]*")',line) 
     if m is not None: 
      print(m.group(1)) 

Все магия в регулярном выражении.

^ххх: (\ d * :("[^"] * ") означает

начинается с начала строки, матч на "ххх :(< любое количество номеров >:" < ничего но «>»

и потому, что последовательность «< ничего, кроме» > "заключен в круглых скобках он будет доступен в качестве группы (по телефону m.group (1))

PS:. в следующий раз не забудьте указать точную ошибку, которую вы получаете

+0

Спасибо, что так много. Это именно то, что я искал. –

0

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

line.startswith('xxx') 

Чтобы найти текст в первых двойных кавычках сделать

re.search(r'"(.*?)"', line).group(1) 

(как match.group(1) является первой в скобках подгруппа)

Таким образом, код будет

with open("file") as f: 
    for line in f: 
     if line.startswith('xxx'): 
      print(re.search(r'"(.*?)"', line).group(1)) 

re module docs

+0

Спасибо, что так много. Я новичок в regex.Can u, пожалуйста, предложите мне ссылку или что-то еще, откуда я могу иметь четкое представление о регулярном выражении. чем снова. –

+0

@ RamakantaChandra Попробуйте документацию. – pacholik

Смежные вопросы