Получить текст между определенными строками как разные строки в регулярном выражении

Я пытался получить текст между двумя строками («Элемент» и «Элемент»), но поскольку «Элемент» присутствует несколько раз в большом документе (который сам является строкой), я получаю почти весь документ. Я не могу понять код регулярного выражения для получения текста между одним «элементом» и следующим «элементом» до последнего «элемента» в виде разных строк.

Я пробовал коды регулярных выражений, но я не могу понять это.

Первая попытка :

(?<=Item)(.*)(?=Item)

Вторая попытка:

value = search('Item(.+)Item', text)
if value is not None:
    value = value.group(1)

Первая попытка выбирает почти весь документ

Вторая попытка дает только первое вхождение текста между «Элемент» и «Элемент».

Любая помощь будет принята с благодарностью.

Попробуйте сделать его не жадным. Поскольку вы фиксируете значение в группе, вы можете опустить обходы. Item(.*?)Item

The fourth bird 29.05.2019 13:47

Не могли бы вы привести пример текста и ожидаемый результат?

Toto 29.05.2019 13:53

Образец текста: «Элемент Здравствуйте, это образец строки элемента в элементе StackOverflow, опубликованном в элементе в среду». Результат: Здравствуйте, это пример, String on Overflow, Опубликовано в среду

Deep Dhillon 29.05.2019 13:56

@Thefourthbird Я пытался это сделать, но все равно возвращает только первое вхождение

Deep Dhillon 29.05.2019 14:02

Я думаю, @Четвертый ответ птицы работает: regex101.com/r/UkcokL/4

Pablo 29.05.2019 14:03

@DeepDhillon Я думаю, это потому, что вы используете исследование. Попробуйте вместо этого использовать re.findall

The fourth bird 29.05.2019 14:04

Если вы хотите сопоставить каждое вхождение Item, вы можете использовать обходные пути. Если вы должны сопоставить его попарно, вы можете опустить обходы.

The fourth bird 29.05.2019 14:10

@Thefourthbird Спасибо за вашу помощь! Теперь я понимаю логику этого

Deep Dhillon 29.05.2019 14:19
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
2
8
55
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий
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

Это сработало! Спасибо @Тото. Я новичок в регулярных выражениях, но я определенно изучил новый полезный метод!

Deep Dhillon 29.05.2019 14:18

Другие вопросы по теме