Заменить повторяющуюся подстроку регулярным выражением? - PullRequest
1 голос
/ 15 марта 2020

Я пытаюсь удалить описания таблиц из следующего текста, чтобы остался только текст не таблицы. Я играл с regex101.com, но не могу найти шаблон, который на самом деле это делает (он всегда занимает весь раздел). Что мне здесь не хватает?

ТАБЛИЦА 37-1 Текст в несколько строк, описывающий таблицу (.pdf)

Не табличный текст.

ТАБЛИЦА 37- 2 Текст в несколько строк, описывающий таблицу (.pdf)

import re
text = 'string of text in block quotes above'
processed_text = re.sub(r'(TABLE)(.|\n)*(\(\.pdf\))', r'', text)
print (processed_text)

Ответы [ 2 ]

0 голосов
/ 15 марта 2020

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

>>> import re                                                                   
>>>                                                                             
>>> text = '''TABLE 37-1 Text over multiple 
...: lines that describes the table (.pdf) 
...: Non table text line 1. 
...: Non table text line 2. 
...: TABLE 37-2 Text over multiple 
...: lines that describes the table (.pdf)'''                                   
>>>                                                                             
>>> re.match(r'TABLE.*?\(\.pdf\)\n(.*)TABLE.*?\(\.pdf\)$', text, re.DOTALL).group(1)          
'Non table text line 1.\nNon table text line 2.\n'

Должно также работать, если в тексте, не являющемся таблицей, есть "TABLE ... (.pdf)" строки.

>>> text = '''TABLE 37-1 Text over multiple 
...: lines that describes the table (.pdf) 
...: Non table text line 1. 
...: Non table text line 2. 
...: TABLE 37-2 non table text that 
...: starts with TABLE and ends with (.pdf)(.pdf) 
...: TABLE 37-2 Text over multiple 
...: lines that describes the table (.pdf)'''                                                 
>>>                                                                                           
>>> re.match(r'TABLE.*?\(\.pdf\)\n(.*)TABLE.*?\(\.pdf\)$', text, re.DOTALL).group(1)          
'Non table text line 1.\nNon table text line 2.\nTABLE 37-2 non table text that\nstarts with TABLE and ends with (.pdf)(.pdf)\n'
0 голосов
/ 15 марта 2020

Попробуйте это:

import re
processed_text = re.sub(r'(^|\n+)TABLE.*\(\.pdf\)($|\n+)', r'', text)
print(processed_text)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...