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

#python #regex

#python #регулярное выражение

Вопрос:

Я пытаюсь написать программу, соответствующую регулярному выражению в файле. Начальные строки моего файла выглядят так, как показано ниже

 Alternate Take with Liz Copeland (Day 1) (12am-1am)                    
    Saturday  March 31, 2007                    
        No.    Artist    Song    Album (Label)    Comment
    buy    1    Tones on Tail    Go! (club mix)    Everything! (Beggars Banquet)    
    buy    2    Devo    (I Can't Get No) Satisfaction    Anthology: Pioneers Who Got Scalped (Warner Archives/Rhino) 

  

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

 with open("data.csv") as my_file:
  for line in my_file:
      re_show = re.compile(r'(Alternate Take with Liz Copeland) ((.*?))s((.*?))')
      num_showtitle_lines_matched = 0
      m_show = re.match(re_show, line)
      bool(m_show) == 1
      if m_show:
         num_showtitle_lines_matched  = 1

         show_title =  m_show.group()

print("Num show lines matched --> {}".format(num_showtitle_lines_matched))
print(show_title)
  

Это должно дать мне результат, как показано ниже

 Alternate Take with Liz Copeland (Day 1) (12am-1am)
num_showtitle_lines_matched -->1
  

Но мой результат не показывает никаких выходных данных.
Пожалуйста, дайте мне знать, как это сделать.Заранее спасибо.

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

1. Это должно дать мне результат, как показано ниже : какой результат?

2. @PedroLobito Он не форматировал, я отредактировал его сейчас

3. хорошо, но мне все еще неясно, что вы пытаетесь сделать. Вы также пытаетесь сопоставить многострочную строку, когда ее нет (вы разбираете файл построчно), попробуйте использовать регулярное выражение my_file.read() .

4. вы пропустили, что вы установили num_showtitle_lines_matched значение 0 в цикле for, после чего вы получаете совпадение, и оно увеличивается до 1, но на последующей итерации оно возвращается к 0

Ответ №1:

Как в комментарии: просто поместите num_showtitle_lines_matched = 0 над циклом:

 with open("data.csv") as my_file:
  num_showtitle_lines_matched = 0
  for line in my_file:
      re_show = re.compile(r'(Alternate Take with Liz Copeland) ((.*?))s((.*?))')      
      m_show = re.match(re_show, line)     
      bool(m_show) == 1
      if m_show:
         num_showtitle_lines_matched  = 1
         show_title =  m_show.group()
print("Num show lines matched --> {}".format(num_showtitle_lines_matched))
print(show_title)
  

Вывод:

 Num show lines matched --> 1
Alternate Take with Liz Copeland (Day 1) (12am-1am)
  

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

1. anonymous13: не могли бы вы отметить ответы как правильные и проголосовать «За»? Спасибо