我以表格形式输出命令。我正在从结果文件中解析此输出并将其存储在字符串中。一行中的每个元素由一个或多个空格字符分隔,因此我使用正则表达式匹配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
后都会附加到列表中。
答案 0 :(得分:134)
使用(
,)
,您正在捕获该群组,如果您只是将其删除,则不会出现此问题。
>>> 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']
答案 1 :(得分:17)
str.split
方法会自动删除项目之间的所有空白区域:
>>> str1 = "a b c d"
>>> str1.split()
['a', 'b', 'c', 'd']
文档在这里:http://docs.python.org/library/stdtypes.html#str.split
答案 2 :(得分:6)
使用re.split
并且拆分模式包含捕获组时,这些组将保留在输出中。如果您不想这样,请改为使用非捕获组。
答案 3 :(得分:1)
其实非常简单。试试这个:
str1="a b c d"
splitStr1 = str1.split()
print splitStr1