распаковать строку в последовательность аргументов - PullRequest
0 голосов
/ 20 марта 2019

вопрос новичка: как распаковать строку в последовательность аргументов:

'{2}, {1}, {0}'.format(*'abc')      # unpacking argument sequence
'c, b, a'

Я не уверен, как настроить разделитель с более длинными словами, но я попробовал camalCase, и он не работал

'sir {}, so your family's name is {}, and you were born in {}'.format(*"HmmamKhoujaSyria")
 #'sir Hmmam, so your family's name is Khouja, and were born in Syria' 

отредактировано: как добавить спецификатор, чтобы строка могла быть разделена camalCase или даже определенным символом, например пробелом

1 Ответ

1 голос
/ 20 марта 2019

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

Эта функция вернет список строк, разделенных верблюдомдело.Затем мы можем использовать это, чтобы напечатать то, что мы хотим.

Помните, что если ваша исходная строка содержит менее 3 заглавных букв, вы получите IndexError: tuple index out of range.Если у вас есть больше, это не будет проблемой.

from re import finditer

def camel_case_split(identifier):
    matches = finditer('.+?(?:(?<=[a-z])(?=[A-Z])|(?<=[A-Z])(?=[A-Z][a-z])|$)', identifier)
    return [m.group(0) for m in matches]

s = "HmmamKhoujaSyria"
l = camel_case_split(s)
'sir {}, so your family\'s name is {}, and you were born in {}'.format(*l)
#'sir Hmmam, so your family's name is Khouja, and were born in Syria' 

Если вы хотите разделить строку чем-то более простым, например пробелом или запятой, тогда вы можете использовать метод str.split ().

s = "Hmmam Khouja Syria"
l = s.split(" ")
'sir {}, so your family\'s name is {}, and you were born in {}'.format(*l)
#'sir Hmmam, so your family's name is Khouja, and were born in Syria' 
...