如何在Python中使用多个分隔符分割字符串?

Aiu*_* YO 6 python arrays string

有这一行:

Breathing 1:-31.145 9:-32.8942 13:-35.8225 2:-35.9872 17:-36.2135 16:-36.6343 12:-36.7487 4:-37.8538 8:-38.6924 7:-39.0389 14:-39.0697 18:-40.0523 3:-40.5393 15:-40.5825 5:-41.6323 11:-45.2976 10:-53.3063 6:-231.617
Run Code Online (Sandbox Code Playgroud)

' ',':-'我想将除分隔符( )之外的所有内容存储在数组中

Lev*_*von 9

更新:我没有意识到这Breathing是您数据的一部分。在这种情况下,您将获得所有字符串。

假设:

b = 'Breathing 1:-31.145 9:-32.8942 13:-35.8225 2:-35.9872'
Run Code Online (Sandbox Code Playgroud)

那么这个简单的构造:

 b.replace(':-',' ').split()
Run Code Online (Sandbox Code Playgroud)

会给:

['Breathing', '1', '31.145', '9', '32.8942', '13', '35.8225', '2', '35.9872']
Run Code Online (Sandbox Code Playgroud)

说明:它:-用空格 ( ' ') 替换任何内容。然后,它会在有空格的地方分割字符串以获取字符串列表。

要获取float数字的值:

['Breathing'] + [float(i) for i in b.replace(':-',' ').split()[1:]]
Run Code Online (Sandbox Code Playgroud)

结果是:

['Breathing', 1.0, 31.145, 9.0, 32.8942, 13.0, 35.8225, 2.0, 35.9872]
Run Code Online (Sandbox Code Playgroud)

解释:与上面类似,除了float()用于所有数字字符串以将它们转换为浮点数,并且“Breathing”字符串被放置在列表的开头。

  • 我认为你的意思是`b.replace(':-', ' ')`。事实上,您正在将两个数字合并为一个。 (3认同)

dbr*_*dbr 5

re.split是执行此操作的一种简单方法 - 在这种情况下,您想要拆分一组分隔符:

>>> import re
>>> thestring = "Breathing 1:-31.145 9:-32.8942 13:-35.8225 2:-35.9872 17:-36.2135 16:-36.6343 12:-36.7487 4:-37.8538 8:-38.6924 7:-39.0389 14:-39.0697 18:-40.0523 3:-40.5393 15:-40.5825 5:-41.6323 11:-45.2976 10:-53.3063 6:-231.617"
>>> re.split(r"[ :\-]+", thestring)
['Breathing', '1', '31.145', '9', '32.8942', '13', '35.8225', '2', '35.9872', '17', '36.2135', '16', '36.6343', '12', '36.7487', '4', '37.8538', '8', '38.6924', '7', '39.0389', '14', '39.0697', '18', '40.0523', '3', '40.5393', '15', '40.5825', '5', '41.6323', '11', '45.2976', '10', '53.3063', '6', '231.617']
Run Code Online (Sandbox Code Playgroud)

[]定义一个字符集,包含空格、:、 和-(需要转义,因为它用于像 之类的范围[a-z]) -+字符集后面的表示一个或多个

要在空格或 上显式分割:-,您可以使用|or 正则表达式:

>>> re.split(":-| ", thestring)
['Breathing', '1', '31.145', ...]
Run Code Online (Sandbox Code Playgroud)

正如我在对该问题的评论中提到的,我本以为分隔符只是:并且-表示负数。


Don*_*sto 3

您可以使用str.split([sep[, maxsplit]])

返回字符串中单词的列表,使用 sep 作为分隔符字符串。如果给出 maxsplit,则最多完成 maxsplit 分割(因此,列表最多有 maxsplit+1 个元素)。如果未指定 maxsplit 或为 -1,则拆分数量没有限制(进行所有可能的拆分)。

应用

>> ' 1  2   3  '.split()
['1', '2', '3']
Run Code Online (Sandbox Code Playgroud)

“同时”与str.replace(old, new[, count])

返回字符串的副本,其中所有出现的子字符串 old 都被 new 替换。如果给出了可选参数 count,则仅替换第一个出现的 count。

应用

>>> a = 'h!e!l!l!o! w!o!r!l!d!'
>>> a.replace('!','')
'hello world'
Run Code Online (Sandbox Code Playgroud)

适用于您的场景:

>> 'Breathing 1:-31.145 9:-32.8942 13:-35.8225 2:-35.9872 17:-36.2135 16:-36.6343
              12:-36.7487 4:-37.8538 8:-38.6924 7:-39.0389 14:-39.0697 18:-40.0523
              3:-40.5393 15:-40.5825 5:-41.6323 11:-45.2976 10:-53.3063 
              6:-231.617'.replace(':-',' ').split(' ')

 ['Breathing', '1', '31.145', '9', '32.8942', '13', '35.8225', '2', 
   '35.9872', '17', '36.2135', '16', '36.6343', '12', '36.7487', '4', '37.8538', 
   '8', '38.6924', '7', '39.0389', '14', '39.0697', '18', '40.0523', '3', 
   '40.5393', '15', '40.5825', '5', '41.6323', '11', '45.2976', 
   '10', '53.3063', '6', '231.617']
Run Code Online (Sandbox Code Playgroud)

所有定义均取自手册