Я пытался получить текст между двумя строками («Элемент» и «Элемент»), но поскольку «Элемент» присутствует несколько раз в большом документе (который сам является строкой), я получаю почти весь документ. Я не могу понять код регулярного выражения для получения текста между одним «элементом» и следующим «элементом» до последнего «элемента» в виде разных строк.
Я пробовал коды регулярных выражений, но я не могу понять это.
Первая попытка :
(?<=Item)(.*)(?=Item)
Вторая попытка:
value = search('Item(.+)Item', text)
if value is not None:
value = value.group(1)
Первая попытка выбирает почти весь документ
Вторая попытка дает только первое вхождение текста между «Элемент» и «Элемент».
Любая помощь будет принята с благодарностью.
Не могли бы вы привести пример текста и ожидаемый результат?
Образец текста: «Элемент Здравствуйте, это образец строки элемента в элементе StackOverflow, опубликованном в элементе в среду». Результат: Здравствуйте, это пример, String on Overflow, Опубликовано в среду
@Thefourthbird Я пытался это сделать, но все равно возвращает только первое вхождение
Я думаю, @Четвертый ответ птицы работает: regex101.com/r/UkcokL/4
@DeepDhillon Я думаю, это потому, что вы используете исследование. Попробуйте вместо этого использовать re.findall
Если вы хотите сопоставить каждое вхождение Item
, вы можете использовать обходные пути. Если вы должны сопоставить его попарно, вы можете опустить обходы.
@Thefourthbird Спасибо за вашу помощь! Теперь я понимаю логику этого
import re
string = 'Item Hello this is a sample Item String on StackOverflow Item Posted on a Item Wednesday'
print re.findall(r"(?<=Item ).+?(?= Item|$)", string)
Выход:
['Hello this is a sample', 'String on StackOverflow', 'Posted on a', 'Wednesday']
Объяснение:
(?<=Item ) # positive lookbehind, make sure we have "Item " before
.+? # 1 or more any character, not greedy
(?= Item|$) # positive lookahead, make sure we have "Item " or end of line after
Это сработало! Спасибо @Тото. Я новичок в регулярных выражениях, но я определенно изучил новый полезный метод!
Попробуйте сделать его не жадным. Поскольку вы фиксируете значение в группе, вы можете опустить обходы.
Item(.*?)Item