python regex re.sub: удалить все до или после шаблона, пока не будет найдено заданное c условие обоими способами - PullRequest
0 голосов
/ 29 мая 2020

Я пытаюсь удалить все, что находится между двумя заглавными буквами, если между ними есть год.

Вот что у меня:

import re

string = 'Sep 09 2018*57.10*58.05*Sep 08 2018*56.76*54.91*Sep 07 2018*58.14*55.20*Sep 06 2018*55.07*54.66*Sep 06 2018*0.91 higher than last year, blablabla*Sep 05 2018*54.71*53.70'

string = re.sub(r'([A-Z].*year)(.*?)(?=[A-Z])', '*', string)

И, что я ожидайте получить:

string = 'Sep 09 2018*57.10*58.05*Sep 08 2018*56.76*54.91*Sep 07 2018*58.14*55.20*Sep 06 2018*55.07*54.66*Sep 05 2018*54.71*53.70'

Итак, я «удалил» все до первой заглавной буквы перед «годом» и все до следующего, что означает: «* 06 сентября 2018 г. * на 0,91 больше, чем в прошлом году, blablabla ', но мой код начинается с начала, а не с года, а затем смотрю назад. Я решил уже через год.

Спасибо, если кто-нибудь поможет мне это исправить.

1 Ответ

0 голосов
/ 29 мая 2020

Вы можете использовать

[A-Z][^A-Z]*year[^A-Z]*(?=[A-Z])

См. демонстрацию регулярных выражений

Подробности

  • [A-Z] - заглавная буква
  • [^A-Z]* - 0+ символов, кроме прописных букв
  • year - слово
  • [^A-Z]* - 0+ символов кроме прописных букв
  • (?=[A-Z]) - сразу справа от текущего местоположения должна быть прописная буква.

В Python используйте

string = re.sub(r'[A-Z][^A-Z]*year[^A-Z]*(?=[A-Z])', '', string)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...