Возможные случаи разделения строки по разделителю - PullRequest
0 голосов
/ 10 июля 2019

У меня есть строка: str = "**Quote_Policy_Generalparty_NameInfo** "

Я разделяю строку как str.split("_"), что дает мне список на python.

Любая помощь в получении результатов, как показано ниже.

[ Quote, Quote_Policy, Quote_Policy_Generalparty, Quote_Policy_Generalparty_NameInfo ]

Ответы [ 4 ]

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

Вы можете использовать range(len(list)) для создания срезов list[:1], list[:2] и т. Д., А затем "_".join(...) для объединения каждого среза

text = "Quote_Policy_Generalparty_NameInfo "
data = text.split('_')

result = []

for x in range(len(data)):
    part = data[:x+1]
    part = "_".join(part)
    result.append(part)

print(result)
2 голосов
/ 10 июля 2019
input = "Quote_Policy_Generalparty_NameInfo"
tokenized = input.split("_")
combined = [
    "_".join(tokenized[:i])
    for i, token in enumerate(tokenized, 1)
]

Значение combined выше будет

['Quote', 'Quote_Policy', 'Quote_Policy_Generalparty', 'Quote_Policy_Generalparty_NameInfo']
0 голосов
/ 10 июля 2019

Если вы найдете приведенные выше ответы слишком чистыми и удовлетворительными, вы также можете рассмотреть регулярные выражения:

>>> import regex as re  # For `overlapped` support
>>> x = "Quote_Policy_Generalparty_NameInfo"
>>> list(map(lambda s: s[::-1], re.findall('(?<=_).*$', '_' + x[::-1], overlapped=True)))
['Quote_Policy_Generalparty_NameInfo', 'Quote_Policy_Generalparty', 'Quote_Policy', 'Quote']
0 голосов
/ 10 июля 2019

вы можете использовать accumulate из itertools, мы в основном даем ему еще один аргумент, который решает, как накапливать два элемента

from itertools import accumulate
input = "Quote_Policy_Generalparty_NameInfo"
output = [*accumulate(input.split('_'), lambda str1, str2 : '_'.join([str1,str2])),]

, что дает:

Out[11]: 
['Quote',
 'Quote_Policy',
 'Quote_Policy_Generalparty',
 'Quote_Policy_Generalparty_NameInfo']
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...