Как вставить пробел перед заглавной буквой, если и только если предыдущая буква не является заглавной? - PullRequest
0 голосов
/ 06 июня 2019

У меня есть текст:

'SMThingAnotherThingBIGCapitalLetters'

и я хочу вывод:

'SM Thing Another Thing BIG Capital Letters'

Мое регулярное выражение сейчас:

r"(\w)([A-Z])", r"\1 \2"

Это работает, когда у меня нет двух заглавных букв рядом друг с другом.

Вывод для моего регулярного выражения:

'S MThing Another Thing B I G Capital Letters'

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

У кого-нибудь есть идея?

Ответы [ 2 ]

3 голосов
/ 06 июня 2019

Вы должны осторожно использовать регулярные выражения. Они могут легко превратиться в гигантских монстров, которых никто не может понять. Вы можете решить вашу проблему с помощью простого цикла вместо регулярного выражения:

a = 'SMThingAnotherThingBIGCapitalLetters'
result = a[0]

for i, letter in enumerate(a):
    if letter.isupper() and (result[-1].islower() or a[i+1].islower()):
        result += ' '
    if i: result += letter
result

'SM Thing Another Thing BIG Capital Letters'

2 голосов
/ 06 июня 2019

Вы можете использовать чередование с 2 группами захвата и заменить на group1 group2 space как r"\1\2 "

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

Пояснение

  • ([A-Z]) Захватcaptital AZ в группе 1
  • (?=[A-Z][a-z]) Позитивный взгляд вперед, утверждают, что справа есть прописные и строчные буквы az
  • | Или
  • ([a-z]) Захватстрочная az в группе 2
  • (?=[A-Z]) Позитивный взгляд, утверждают, что справа - прописные AZ

Regex demo

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