2015-12-24 5 views
4

Мне нужна помощь со следующим шаблоном, я боюсь много часов. У меня есть текст, как:Текст между совпадением шаблонов RegEx Python

<<12/24/2015 00:00 userrrr>> 
********** Text all char and symbols ************ 
<<12/24/2015 00:00 CET userr>> 
Text all char and symbols 
<<12/24/2015 00:00 GMT+1 userrrr>> Text in same line 
<<12/24/2015 00:00 CET userrr>> 
Text all characters and symbols 
<<12/24/2015 00:00 GMT+1 userrrrrrr>> Text in same line 
More Text all characters and symbols 
<<12/24/2015 00:00 CET userrrrr>> 
More text all characters and symbols 
<<12/24/2015 00:00 CET userrrrrrrrrrr>> 
More Text all characters and symbols 

с помощью шаблона:

(\<<)(\d{2}/\d{2}/\d{4}\s\d{2}:\d{2})(.*?(?=>>))(>>) 

даты и времени, и все между стрелками подобран correctly.Unfortunately, я не могу найти способ извлечь текст между группами конечных patterns.The должен выглядеть (left_arrows), (DateTime), (пользователь), (RIGHT_ARROWS), (текст) .Отель ближе я был с помощью:

(\<<)(\d{2}/\d{2}/\d{4}\s\d{2}:\d{2}\s\D{3}.*?(?=\s))\s(.*?(?=>>))(>>)((?s).*?(?=<<\d{2}/\d{2})) 

Но это не соответствует первому и последнему правильно. Click Here to check the result(pythex.org)

+0

Что вы хотите извлечь? Вы уверены, что 'line.startswith (" << ")' не может выполнить большую часть того, что вы хотите? –

+0

3 группы (datetimeoffset), (Пользователь), (Текст между pattterns). Так что теперь я не могу извлечь текст между шаблонами. У меня нет проблем с первыми 2 группами. – Zars

+0

Почему это помечено 'BeautifulSoup'? .. – alecxe

ответ

1
(\<<)(\d{2}/\d{2}/\d{4}\s\d{2}:\d{2}\s\D{0,3}.*?(?=\s))\s(.*?(?=>>))(>>)((?s).*?(?=<<\d{2}/\d{2}|$)) 
                           ^^ 

Вы должны дать |$ для последней строки в match.See демо.

https://regex101.com/r/fM9lY3/51

+0

Привет, последняя строка работает сейчас, спасибо за информацию. Пока в ваших демонстрационных работах, в моем терминале и pythex ссылку« ********* * Текст всех символов и символов ************ "не удается. – Zars

+0

@ Zars try '(\ <<) (\ d {2}/\ d {2}/\ d {4} \ s \ d {2}: \ d {2} \ s \ D {0,3} . *? (? = \ с)) \ с (. *? (? = >>)) (>>) ([\ s \ S] * (? = << \ д {2}/\ д { 2} | $)) ' – vks

+0

@vsk нет второго не работает, мне все еще интересно, почему в regex101 работает, но нет в pythex и моем терминале ... – Zars

0

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

(\<<)(\d{2}/\d{2}/\d{4}\s\d{2}:\d{2})(.*?(?=>>))(>>)\n\*+([^\*]+)\*+\n 
Смежные вопросы