根据正则表达式分割字符串


143

我有表格形式的命令输出。我正在从结果文件中解析此输出,并将其存储在字符串中。一行中的每个元素都由一个或多个空格字符分隔,因此我正在使用正则表达式来匹配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添加到列表中。


1
我否决了这个问题。原因是,尽管问题本身是相关的,但给定的示例并不足够难于真正需要所请求的解决方案。例如,如果您有单词块,数字块,并且想将它们分成不同的变量,则需要使用正则表达式。
erikbwork

@erikbwork我想删除结果字符串中不需要的空格项'str2'
user2763554,18年

1
是的,您只需使用即可实现str1.split()。无需正则表达式。
erikbwork

Answers:


176

通过使用()您将捕获该组,如果仅删除它们,则不会出现此问题。

>>> 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']

4
把事情简单化。str.split绝对是最好的:D
jamylak 2012年

如果我有一个以withspace开头和结尾的字符串,该如何使用。例如:“ abc de”。为此,输出为['', 'a', 'b', 'c', 'de', '']
Rakholiya Jenish

@RakholiyaJenishstr1.split()
jamylak 2015年

@jamylak string.split()是一个选项。我在问是否也可以用正则表达式来完成?
Rakholiya Jenish

2
@RakholiyaJenish不能使用re.findall选项吗?
jamylak 2015年


7

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


2
str.split对于您的示例,使用可能更好。我只是想解释一下为什么您会得到自己的行为。
BrenBarn 2012年

2

实际上,它非常简单。试试这个:

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

2
我会为此+1,但您使用的是丑陋的分号。
jamylak 2012年

3
@jamylak哈哈。我去换 :)使用java和python的习惯!
该死的

1
@ GururajY.S。如果您只想根据空间进行拆分,则只需使用stringToSplit.split()
该死的
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.