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

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

Сообщение Anonymous »

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

Код: Выделить всё

patt = r"(?:bc)?(.*?)(?:ef)?"
a = re.sub(patt, r"\1", "bcdef")  # d - as expected
a = re.sub(patt, r"\1", "abcdefg")  # adg - as expected

# I'd like to get `d` only without `a` and `g`

# Trying to remove `a`:
patt = r".*(?:bc)?(.*?)(?:ef)?"
a = re.sub(patt, r"\1", "bcdef")  # empty !!!
a = re.sub(patt, r"\1", "abcdef")  # empty !!!

# make non-greedy
patt = r".*?(?:bc)?(.*?)(?:ef)?"
a = re.sub(patt, r"\1", "bcdef")  # d - as expected
a = re.sub(patt, r"\1", "abcdef")  # `ad` instead of `d` - `a` was not captured

# make `a` non-captured
patt = r"(?:.*?)(?:bc)?(.*?)(?:ef)?"
a = re.sub(patt, r"\1", "abcdef")  # ad !!! `a` still not captured
Я также пытался использовать re.search, но безуспешно.
Как я могу извлечь только d ( подстрока между необязательными подстроками bc и ef) из abcdefg?
Тот же шаблон должен возвращать hij при применении к hij.

Подробнее здесь: https://stackoverflow.com/questions/793 ... substrings
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Python»