Как получить искомую строку с re из строк

1
 Tue Aug 21 17:02:26 2018 (gtgrhrthrhrhrthhhthrthrhrh)
 fjfpjpgporejpejgjr[eh[[[jh[j[ej[[ej[ej[e]]]]
 fkw[kgkeg[ekrk[ekg[kergk[erkg[eg[kg]
 Tue Aug 21 17:31:06 2018 ( ijwejfwfjwpfjwf[[few[jjfwfefwfeffeww]]
 fiowhfiweohewhfpwfhpfhpepwehfphpwhfpehfpwfh
 f,wfpewfefewgpwpg,pewgp
 Tue Aug 21 18:10:42 2018 ( reijpjfpjejferjfrejfpjefjer
 k[pfk[epkf[kr[ek[ke[gkk]
 r[g[keprkgpekg[rkg[pkg[ekg]

Выше приведен пример содержимого в текстовом файле. Я хочу извлечь строку с re. Как мне построить условие findall для достижения ожидаемого результата ниже? Я пробовал следующее:

  match=re.findall(r'[Tue\w]+2018$',data2)

Но это не работает. Я понимаю, что $ является символом конца строки. Как мне это сделать?

Ожидаемый результат:

  Tue Aug 21 17:02:26 2018
  Tue Aug 21 17:31:06 2018
  Tue Aug 21 18:10:42 2018
           .
           .
           .
  • 0
    $ - это символ конца строки, а не искомая строка. Выражение, которое вы использовали, вернет совпадение, только если последним в строке будет 2018.
  • 0
    Кроме того, вы можете найти похожий шаблон через re.search(r'(^\w{2,3}\s+\w{2,3}[^(]+)', line) .
Показать ещё 3 комментария
Теги:
string
extract

1 ответ

2
Лучший ответ

Используйте шаблон:

^Tue.*?2018
  • ^ Утвердить позицию начала строки.
  • Tue Literal подстрока.
  • .*? Матч лениво.
  • 2018 Соответствует литеральной подстроке.

Поскольку вы работаете с многострочной строкой и хотите re.MULTILINE шаблон в начале строки, вы должны использовать флаг re.MULTILINE.

import re
mystr="""
Tue Aug 21 17:02:26 2018 (gtgrhrthrhrhrthhhthrthrhrh)
fjfpjpgporejpejgjr[eh[[[jh[j[ej[[ej[ej[e]]]]
fkw[kgkeg[ekrk[ekg[kergk[erkg[eg[kg]
Tue Aug 21 17:31:06 2018 ( ijwejfwfjwpfjwf[[few[jjfwfefwfeffeww]]
fiowhfiweohewhfpwfhpfhpepwehfphpwhfpehfpwfh
f,wfpewfefewgpwpg,pewgp
Tue Aug 21 18:10:42 2018 ( reijpjfpjejferjfrejfpjefjer
k[pfk[epkf[kr[ek[ke[gkk]
r[g[keprkgpekg[rkg[pkg[ekg]
"""

print(re.findall(r'^Tue.*?2018',mystr,re.MULTILINE))

Печать:

['Tue Aug 21 17:02:26 2018', 'Tue Aug 21 17:31:06 2018', 'Tue Aug 21 18:10:42 2018']
  • 0
    Это можно легко сломать
  • 0
    Это ничего не «сломает». OP хочет сопоставить строки, начиная с Tue и заканчивая 2018 / четырьмя цифрами.
Показать ещё 10 комментариев

Ещё вопросы

Сообщество Overcoder
Наверх
Меню