Использование Regex для добавления пробелов в строке на основе заглавных букв? - PullRequest
2 голосов
/ 29 апреля 2020

Я хочу поставить пробел между последним верхним регистром и между верхним и нижним регистром. Например:

HelloWorld -> Hello World

HELloworld -> HE Lloworld

HElloWOrld -> H Ello W Orld

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

newkey = " ".join(re.findall('[A-Z][^A-Z]*', key))

Ответы [ 2 ]

0 голосов
/ 29 апреля 2020

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

inp = "HElloWOrld"
out = re.sub(r'([A-Z]+)([A-Z][a-z])', '\\1 \\2', inp)
out = re.sub(r'([a-z])([A-Z])', '\\1 \\2', out)
print(out)

Это печатает:

H Ello W Orld

Первый вызов заменяет заглавную букву, за которой следуют другая заглавная буква и строчная буква , Второй вызов разделяет границы между строчными и прописными буквами.

0 голосов
/ 29 апреля 2020

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

Паттерн

(?:[A-Z]+|[a-z])(?=[A-Z])

Объяснение

  • (?: Группа без захвата
    • [A-Z]+ Матч 1+ символов AZ
    • | Или
    • [a-z] Матч az
  • ) Близкая группа
  • (?=[A-Z]) Позитивный прогноз, утверждающий, что прямо направо - AZ

Regex demo | Python демо

При замене используйте полное совпадение с пробелом r"\g<0> "

Пример кода

import re

regex = r"(?:[A-Z]+|[a-z])(?=[A-Z])"
test_str = ("HelloWorld\n\n"
    "HELloworld\n\n"
    "HElloWOrld\n")

result = re.sub(regex, r"\g<0> ", test_str)
print (result)

Выход

Hello World

HE Lloworld

H Ello W Orld
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...