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

use*_*554 125 python regex

我以表格形式输出命令.我正在从结果文件中解析此输出并将其存储在字符串中.一行中的每个元素由一个或多个空格字符分隔,因此我使用正则表达式匹配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!!!
Run Code Online (Sandbox Code Playgroud)

有一个更好的方法吗?

将每个拆分str2附加到列表后.

jam*_*lak 157

通过使用(,)您捕获组,如果您只是删除它们,您将不会遇到此问题.

>>> str1 = "a    b     c      d"
>>> re.split(" +", str1)
['a', 'b', 'c', 'd']
Run Code Online (Sandbox Code Playgroud)

但是没有必要使用正则表达式,str.split如果没有指定任何分隔符,将为您分割这个空格.在这种情况下,这将是最好的方法.

>>> str1.split()
['a', 'b', 'c', 'd']
Run Code Online (Sandbox Code Playgroud)

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

>>> re.split("\s+", str1)
['a', 'b', 'c', 'd']
Run Code Online (Sandbox Code Playgroud)

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

>>> re.findall(r'\S+',str1)
['a', 'b', 'c', 'd']
Run Code Online (Sandbox Code Playgroud)

  • 把事情简单化.`str.split`绝对是最好的:D (4认同)
  • @RakholiyaJenish不能使用`re.findall`选项吗? (2认同)

Tre*_*vor 23

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

>>> str1 = "a    b     c      d"
>>> str1.split()
['a', 'b', 'c', 'd']
Run Code Online (Sandbox Code Playgroud)

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


Bre*_*arn 7

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

  • 对于您的示例,使用`str.split`可能更好。我只是想解释一下为什么您会得到自己的行为。 (2认同)