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

Posted

技术标签:

【中文标题】根据正则表达式拆分字符串【英文标题】:Split string based on a regular expression 【发布时间】:2012-06-14 01:16:01 【问题描述】:

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

【问题讨论】:

我否决了这个问题。原因是,虽然问题本身是相关的,但给定的示例并不足以真正需要所请求的解决方案。如果您有例如单词块、数字块并且您想将它们分成不同的变量,则需要使用正则表达式。 @erikbwork 我想删除结果字符串'str2'中不需要的空格项 是的,您只需使用str1.split() 即可实现。不需要正则表达式。 这能回答你的问题吗? Split Strings into words with multiple word boundary delimiters 【参考方案1】:

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

【讨论】:

使用str.split 可能更适合您的示例。我只是想解释为什么你会得到你的行为。【参考方案2】:

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

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

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

【讨论】:

@GururajY.S.:str.split() 可能是这种轻型的最佳选择。【参考方案3】:

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

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

【讨论】:

保持简单。 str.split 绝对是最好的 :D 如果我有一个以空格开头和结尾的字符串,我该如何使用它。例如:'a b c de'。为此,输出为['', 'a', 'b', 'c', 'de', ''] @RakholiyaJenish str1.split() @jamylak string.split() 是一个选项。我在问是否也可以使用正则表达式来完成? @RakholiyaJenish 你不能使用re.findall 选项吗?【参考方案4】:

其实很简单。试试这个:

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

【讨论】:

我会为此 +1,但你使用的是难看的分号。 @jamylak 哈哈。我会改变它们。 :) 使用java和python的习惯! @GururajY.S.如果你只是想根据空间分割,你应该simply使用stringToSplit.split()

以上是关于根据正则表达式拆分字符串的主要内容,如果未能解决你的问题,请参考以下文章

用于根据空格分隔符拆分文本的正则表达式 [重复]

正则表达式 .net 拆分

C ++拆分字符串基于/使用(增强)正则表达式来查找令牌

正则表达式 - 在最右边的斜杠出现处拆分字符串 [Hive]

如何在 JavaScript 中将长正则表达式拆分为多行?

C++ 11 正则表达式未按预期返回组