Python: эффективный способ добавить пробел в строке перед заглавной буквой - PullRequest
1 голос
/ 10 июля 2020

Как лучше всего преобразовать следующую строку в ожидаемую строку в формате Python.

  1. "PowerEdgeSystem" => Power Edge System
  2. "VMwareSystem" => VMware System
  3. VMwareSystemEQUIPMENT => VMware System EQUIPMENT

Пробовал:

s = 'PowerEdgeSystem'
s = ''.join([' ' + c if i != 0 and c.isupper() else c for i, c in enumerate(s)])

Первая строка подходит, но не так хороша для второй строки. Тем не менее, мы можем проверить регистр «обеих» сторон конкретного символа и добавить пробел на основе этого, как показано ниже,

s = ''.join([' ' + c if i != 0 and c.isupper() and not c[i+1].isupper() else c for i, c in enumerate(s)])

Но код станет более запутанным. Я жду чего-то более понятного (если есть). Спасибо,

Ответы [ 2 ]

3 голосов
/ 10 июля 2020

Я думаю, вам понадобится что-то вроде этого, используя Регулярное выражение :

>>> re.sub(r"(\w)([A-Z])", r"\1 \2", "WordWordWord")
'Word Word Word'

К сожалению, это не удается на "VMwareSystem".

>>> re.sub(r"(\w)([A-Z])", r"\1 \2", "VMwareSystem")
'V Mware System'
1 голос
/ 10 июля 2020

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

>>> matchPattern = r"([^A-Z]+)([A-Z]+)"
>>> replacePattern = r"\1 \2"
>>> re.sub(matchPattern, replacePattern, "VMwareSystemVMwareSystem")
'VMware System VMware System'
>>> re.sub(matchPattern, replacePattern, "PowerEdgeSystem")
'Power Edge System'
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...