基于正则表达式拆分字符串

我有一个表格形式的命令输出。我从一个结果文件中解析这个输出,并将其存储在一个字符串中。一行中的每个元素由一个或多个空格字符分隔,因此我使用正则表达式来匹配1个或多个空格并对其进行分隔。然而,每个元素之间都插入了一个空格:

>>> str1="a    b     c      d" # spaces are irregular
>>> str1
'a    b     c      d'
>>> str2=re.split("( )+", str1)
>>> str2
['a', ' ', 'b', ' ', 'c', ' ', 'd'] # 1 space element between!!!

还有更好的办法吗?

在每次拆分后,将 str2追加到一个列表中。

265015 次浏览

当您使用 re.split并且拆分模式包含捕获组时,这些组将保留在输出中。如果您不希望这样,可以使用非捕获组。

str.split方法将自动删除项目之间的所有空白:

>>> str1 = "a    b     c      d"
>>> str1.split()
['a', 'b', 'c', 'd']

医生到了 http://docs.python.org/library/stdtypes.html#str.split

通过使用 (),您正在捕获组,如果您只是删除他们,您将不会有这个问题。

>>> str1 = "a    b     c      d"
>>> re.split(" +", str1)
['a', 'b', 'c', 'd']

但是不需要正则表达式,没有指定任何分隔符的 str.split将按空格将其分割。在这种情况下,这是最好的办法。

>>> str1.split()
['a', 'b', 'c', 'd']

如果你真的想要正则表达式,你可以使用这个('\s'表示空格,它更清晰) :

>>> re.split("\s+", str1)
['a', 'b', 'c', 'd']

或者可以找到所有非空格字符

>>> re.findall(r'\S+',str1)
['a', 'b', 'c', 'd']

其实很简单,试试这个:

str1="a    b     c      d"
splitStr1 = str1.split()
print splitStr1