Регулярное выражение в Python для удаления всех символов верхнего регистра перед двоеточием

#python #regex #string #text #re

#python #регулярное выражение #строка #текст #python-re

Вопрос:

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

Ввод текста

 text = 'ABC: This is a text. CDEFG: This is a second text. HIJK: This is a third text'

 

Желаемый результат:

  'This is a text. This is a second text. This is a third text'
 

Текущий код и вывод:

 re.sub(r'^. [:]', '', text)

#current output
'This is a third text'
 

Можно ли это сделать с помощью однострочного регулярного выражения или мне нужно перебирать каждое character.isupper() , а затем реализовывать регулярное выражение?

Комментарии:

1. Вы можете использовать ? или *? (ленивое регулярное выражение), чтобы найти наименьшую совпадающую строку.

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

3. @MarkSouls Но это не решит вопрос, так как в этом случае он не соответствует символам верхнего регистра, а привязка предотвращает множественные совпадения

4. @Thefourthbird Да, я просто поставил это как своего рода связанный совет.

Ответ №1:

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

 b[A-Z] :s*
 
  • b Граница слова для предотвращения частичного совпадения
  • [A-Z] : Сопоставьте 1 символы верхнего регистра A-Z и a :
  • s* Сопоставьте необязательные символы пробела

Демонстрация регулярных выражений

 import re

text = 'ABC: This is a text. CDEFG: This is a second text. HIJK: This is a third text'
print(re.sub(r'b[A-Z] :s*', '', text))
 

Вывод

 This is a text. This is a second text. This is a third text