不带公共分隔符的Python字符串拆分

不带公共分隔符的Python字符串拆分,python,regex,string,split,Python,Regex,String,Split,我对Python相当陌生。我使用的一个外部模拟软件为我提供报告,其中包括以下格式的数据: 1 29 Jan 2013 07:33:19.273 29 Jan 2013 09:58:10.460 8691.186 我希望将上述数据分成四个字符串,即: '1', '29 Jan 2013 07:33:19.273', '29 Jan 2013 09:58:10.460', '8691.186' 我不能使用str.split,因为它将日期拆分为多个字符串。在第一个日期

我对Python相当陌生。我使用的一个外部模拟软件为我提供报告,其中包括以下格式的数据:

1    29 Jan 2013 07:33:19.273    29 Jan 2013 09:58:10.460          8691.186
我希望将上述数据分成四个字符串,即:

'1', '29 Jan 2013 07:33:19.273', '29 Jan 2013 09:58:10.460', '8691.186'
我不能使用str.split,因为它将日期拆分为多个字符串。在第一个日期和第一个日期之间以及第一个日期和第二个日期之间似乎有四个空格。我不知道这是四个空格还是四个标签

在拆分时使用“\t”作为分隔符没有多大作用。如果指定“”4个空格作为分隔符,则会得到前三个字符串。然后我还得到一个空字符串和最后一个字符串中的前导空格。第二个日期和数字之间有10个空格

任何关于如何处理这一问题的建议都会非常有用


谢谢

您可以使用一个简单的正则表达式在多个空间上拆分:

import re

multispace = re.compile(r'\s{2,}')  # 2 or more whitespace characters
fields = multispace.split(inputline)
演示:

>>> import re
>>> multispace = re.compile(r'\s{2,}')  # 2 or more whitespace characters
>>> multispace.split('1    29 Jan 2013 07:33:19.273    29 Jan 2013 09:58:10.460          8691.186')
['1', '29 Jan 2013 07:33:19.273', '29 Jan 2013 09:58:10.460', '8691.186']

可以使用简单的正则表达式在多个空间上拆分:

import re

multispace = re.compile(r'\s{2,}')  # 2 or more whitespace characters
fields = multispace.split(inputline)
演示:

>>> import re
>>> multispace = re.compile(r'\s{2,}')  # 2 or more whitespace characters
>>> multispace.split('1    29 Jan 2013 07:33:19.273    29 Jan 2013 09:58:10.460          8691.186')
['1', '29 Jan 2013 07:33:19.273', '29 Jan 2013 09:58:10.460', '8691.186']

如果数据是固定宽度的,则可以在字符串中使用字符寻址

n=str[0]
d1=str[2:26]
d2=str[27:51]
l=str[52:]

但是,如果Jan 02显示为Jan 2,这可能不起作用,因为字符串的宽度可能是可变的

如果数据是固定宽度,则可以在字符串中使用字符寻址

n=str[0]
d1=str[2:26]
d2=str[27:51]
l=str[52:]

但是,如果Jan 02显示为Jan 2,这可能不起作用,因为字符串的宽度可能是可变的

子字符串是否总是以相同的顺序和类型显示?在您的示例中->数字、日期、日期、数字它实际上是固定宽度的输出格式吗?这现在有点老派了,但我在天文学数据中看到过,这可能意味着根本没有分隔符,只有填充。@DonalFellows:好吧,因为日期是一种固定格式,唯一有可能填充不足的字段是那里的初始计数器号。你的子字符串总是以相同的顺序和类型出现吗?在您的示例中->数字、日期、日期、数字它实际上是固定宽度的输出格式吗?这现在有点老套了,但我在天文学数据中看到过,这可能意味着根本没有分隔符,只有填充。@DonalFellows:好吧,因为日期是一种固定格式,唯一有可能填充不足的字段是那里的初始计数器编号。