#python #regex #regex-group
#python #регулярное выражение #python-re
Вопрос:
Цель: разбить текст на список на основе числового или десятичного совпадения, который извлекает весь текст до следующего совпадения, но не включая его. Язык / версия: Python 3.8.5 с использованием python re.findall() и я открыт для альтернативных предложений.
Текстовый пример (да, все это в одной строке):
1 Something Interesting here 2 More interesting text 2.1 An example of 2C19 a header 2.3 Another header example 2.4 another interesting header 10.1 header stuff 14 the last interesting 3A4 header
Вывод цели:
['1 Something Interesting here',
'2 More interesting text',
'2.1 An example of 2C19 a header',
'2.3 Another header example',
'2.4 another interesting header',
'10.1 header stuff',
'14 the last interesting 3A4 header'
]
Я могу определить большинство подходящих целых / десятичных начальных точек, используя:
(d .d )|([^a-zA-Z]dd)|( d )
Я изо всех сил пытаюсь найти способ вернуть текст между совпадениями плюс само совпадение.
Чтобы сэкономить вам время, вот моя песочница регулярных выражений
Любезно благодарю вас
Ответ №1:
Вы можете использовать положительные выражения для сопоставления до следующего совпадения.
Вот обновленное регулярное выражение (песочница):
b(?:d (?:.d )?)b.*?(?=b(?:d (?:.d )?)b|$)
В Python:
regex = r'b(?:d (?:.d )?)b.*?(?=b(?:d (?:.d )?)b|$)'
string = ' 1 Something Interesting here 2 More interesting text 2.1 An example of 2C19 a header 2.3 Another header example 2.4 another interesting header 10.1 header stuff 14 the last interesting 3A4 header'
result = re.findall(regex, string)
В этом случае result
будет:
>>> result
['1 Something Interesting here ',
'2 More interesting text ',
'2.1 An example of 2C19 a header ',
'2.3 Another header example ',
'2.4 another interesting header ',
'10.1 header stuff ',
'14 the last interesting 3A4 header']
Обратите внимание, что это решение также извлекает интервал в конце. Если вам не нужен этот интервал, вы можете вызвать strip
свои строки:
>>> [ match.strip() for match in result ]
['1 Something Interesting here',
'2 More interesting text',
'2.1 An example of 2C19 a header',
'2.3 Another header example',
'2.4 another interesting header',
'10.1 header stuff',
'14 the last interesting 3A4 header']