如何在不创建两个列表和附加的情况下分割这个多个分隔符,这似乎是非常影响性能的操作。
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 模块:
>>> import re
>>> s = 'ABCD..EFGH.IJKLM|NOPQ|RSTUV|D|F.g|Y|H|J|K|R|Y||'
>>> re.findall(r'(?<=\|)[^|]*|(?:(?<=\.)|\A)[^|.]*', s)
['ABCD', '', 'EFGH', 'IJKLM', 'NOPQ', 'RSTUV', 'D', 'F.g', 'Y', 'H', 'J', 'K', 'R', 'Y', '', '']
旧答案:
与 new regex module ,你可以这样做:
>>> import regex
>>> s = 'ABCD.EFGH.IJKLM|NOPQ|RSTUV|D|F.g|Y|H|J|K|R|Y'
>>> regex.findall(r'\G\.?\K[^.|]+|[^|]+', s)
['ABCD', 'EFGH', 'IJKLM', 'NOPQ', 'RSTUV', 'D', 'F.g', 'Y', 'H', 'J', 'K', 'R', 'Y']
其中 \G
匹配字符串的开头或上一个匹配之后的下一个位置,而 \K
丢弃左侧的所有字符(此处可选的点)比赛结果。
\G
用于强制所有结果连续,直到第一个管道。由于没有任何内容与模式中的管道匹配,因此连续性被破坏,第二个分支 [^|]+
用于其他项目。
注意:以同样的方式,您可以选择使用以下模式来确保字符串第二部分的连续性:\|\K[^|]+|[^|.]+
(如果字符串的第二部分包含很多项目,这可能会很有趣)。但这次不需要使用 \G
anchor ,因为每个连续项前面都有一个管道。
注2:如果你想考虑空项,你可以将模式更改为:
regex.findall(r'\G(?:\A|\.)\K[^.|]*|[^|]+|(?<=\|)', s)
或
regex.findall(r'\|\K[^|]*|(?:\.|\A)\K[^|.]*', s)
关于python - 使用分隔符 1 和索引 [0] 与其他分隔字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33693049/