【问题标题】:Possible occurrences of splitting a string by delimiter通过分隔符拆分字符串的可能情况
【发布时间】:2019-07-09 22:20:25
【问题描述】:
我有一个字符串:str = "**Quote_Policy_Generalparty_NameInfo** "
我将字符串拆分为str.split("_"),这给了我一个 python 列表。
对于获得如下输出的任何帮助表示赞赏。
[ Quote, Quote_Policy, Quote_Policy_Generalparty, Quote_Policy_Generalparty_NameInfo ]
【问题讨论】:
标签:
python
string
list
split
permutation
【解决方案1】:
您可以使用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】:
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']
【解决方案3】:
你可以使用itertools中的accumulate,我们基本上给它一个参数,它决定如何累积两个元素
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']
【解决方案4】:
如果你觉得上面的答案过于干净和令人满意,你也可以考虑正则表达式:
>>> 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']