基于正则expression式拆分string

我有一个表格forms的命令的输出。 我从结果文件parsing这个输出并将其存储在一个string中。 一行中的每个元素由一个或多个空格字符分隔,因此我使用正则expression式匹配一个或多个空格并对其进行分割。 但是,在每个元素之间插入一个空格:

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

有一个更好的方法吗?

每个拆分str2被附加到列表后。

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

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

然而,没有必要使用正则expression式,没有指定分隔符的str.split将会以空格分隔给你。 这将是这种情况下最好的方法。

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

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

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

或者你可以find所有非空白字符

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

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

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

文档在这里: http : //docs.python.org/library/stdtypes.html#str.split

当您使用re.split并且分割模式包含捕获组时,组将保留在输出中。 如果你不想要这个,请使用非捕获组。

其实很简单。 尝试这个:

 str1="abcd" splitStr1 = str1.split() print splitStr1