Как изменить нижний регистр на верхний регистр при нескольких вариантах выбора в режиме регулярного выражения

у меня есть несколько вариантов

a.  firms and government.
b.  households and firms.
c.  analyzing available data.
d.  being objective.

Я хочу заменить их в следующей форме

A. Firms and government.
B. Households and firms.
C. Analyzing available data.
D. Being objective.

Вот моя попытка регулярного выражения на regex101
Найдите \t[a-z]. \t и замените на [\U\1].

Хотя я могу использовать простую замену в АЭС, а. к А. к д. к D. но режим regx должен быть более эффективным.


51
2

Ответы:

Notepad++ или VSCode напрямую не поддерживают замену текста заглавными буквами. Для этого вам нужно написать скрипт:

Регулярное выражение, которое будет соответствовать нескольким вариантам:

'[*][*](\w).\s+(\w)(.+)'

И весь код Python для замены их заглавной формой выглядит следующим образом:

text = """
**a.    firms and government.**

**b.    households and firms.**

**c.    analyzing available data.**

**d.    being objective.**
"""


import re

pattern = r'[*][*](\w).\s+(\w)(.+)'

def replace_func(match):
    return f'**{match.group(1).upper()}. {match.group(2).upper()}{match.group(3)}'

result = re.sub(pattern, replace_func, text)
print(result)

Решено

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

Найдите что: ^\h*([a-z]\.)\h*([a-zA-Z])
Заменить на: \U$1 $2

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

Подробности

  • ^ - начало линии (на АЭС)
  • \h* — любые ноль или более горизонтальных пробелов.
  • ([a-z]\.) — Группа 1: буква ASCII (строчная, но она может соответствовать и верхнему регистру, если вы выберете опцию «Согласовать регистр»)
  • \h* — любые ноль или более горизонтальных пробелов.
  • ([a-zA-Z]) — Группа 2: любая буква ASCII.
  • \U$1 $2\U переводит следующие символы в верхний регистр, а $1/$2 обозначают текст, захваченный в соответствующие группы.