如何拆分这个多重分隔符而不创建两个列表并附加(这似乎非常影响性能)。你知道吗
string = 'ABCD.EFGH.IJKLM|NOPQ|RSTUV'
string.split("|")[0].split(".") + string.split("|")[1:]
Out[156]: ['ABCD', 'EFGH', 'IJKLM', 'NOPQ', 'RSTUV']
简单re.split(r'[.|]')
不起作用,因为在字符串的第二部分。你知道吗
string = 'ABCD.EFGH.IJKLM|NOPQ|RSTUV|D|F.g|.Y|'
re.split(r'[./|]', string)
Out[179]: ['ABCD', 'EFGH', 'IJKLM', 'NOPQ', 'RSTUV', 'D', 'F', 'g', '', 'Y', '']
数据NOPQ
和RSTUV
可能包含.
,但它不是分隔符。管道分隔列的数目可能会增加。但是,总是在第一个|
之前,分隔符.
在第一个|
之后是分开的,只有|
是分隔符。你知道吗
几乎没有其他可能的数据组合
string = 'ABCD.EFGH.IJKLM|NOPQ|RSTUV|DFGR'
string.split("|")[0].split(".") + string.split("|")[1:]
Out[174]: ['ABCD', 'EFGH', 'IJKLM', 'NOPQ', 'RSTUV', 'DFGR']
string = 'ABCD.EFGH.IJKLM|NOPQ|RSTUV|D.F.GR.'
string.split("|")[0].split(".") + string.split("|")[1:]
Out[176]: ['ABCD', 'EFGH', 'IJKLM', 'NOPQ', 'RSTUV', 'D.F.GR.']
string = 'ABCD.EFGH.IJKLM|NOPQ|RSTUV|D|F.g|.Y|'
string.split("|")[0].split(".") + string.split("|")[1:]
Out[178]: ['ABCD', 'EFGH', 'IJKLM', 'NOPQ', 'RSTUV', 'D', 'F.g', '.Y', '']
string = 'ABCD.EFGH.IJKLM|NOPQ|RSTUV|D|F.g|Y|H|J|K|R|Y'
string.split("|")[0].split(".") + string.split("|")[1:]
Out[181]: ['ABCD', 'EFGH', 'IJKLM', 'NOPQ', 'RSTUV', 'D', 'F.g',
'Y', 'H', 'J', 'K', 'R', 'Y']
新答案:
使用re模块:
旧答案:
使用new regex module,您可以:
demo
其中
\G
匹配字符串的开头或上一个匹配后的下一个位置,\K
从匹配结果中丢弃左侧的所有字符(这里的可选点)。你知道吗\G
用于强制所有结果在第一个管道之前保持连续。由于模式中没有匹配管道的内容,因此将破坏连续性,并将第二个分支[^|]+
用于其他项。你知道吗注意:同样地,您可以选择使用以下模式确保字符串第二部分的连续性:
\|\K[^|]+|[^|.]+
(如果字符串第二部分包含很多项,这可能会很有趣)。但是这次不需要使用\G
锚点,因为每个相邻项前面都有一个管道。你知道吗注2:如果要考虑空项,可以将模式更改为:
或者
使用
re
模块。使用re.split
应该可以做到这一点,例如re.split('[|.]', string)
相关问题 更多 >
编程相关推荐