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

2021-01-26 06:20:33 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个表格形式的命令输出。我正在分析结果文件的输出并将其存储在字符串中。一行中的每个元素都由一个或多个空格字符分隔,因此我使用正则表达式来匹配一个或多个空格并将其拆分。但是,在每个元素之间插入一个空格:

>>> 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都会附加到列表中。

3条回答
网友
1楼 ·

通过使用(),可以捕获组,如果简单地删除它们,就不会有这个问题。

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

但是不需要regex,str.split如果没有指定任何分隔符,则会为您用空格分隔。在这种情况下,这是最好的办法。

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

如果您真的需要regex,可以使用这个('\s'表示空白,而且更清楚):

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

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

>>> re.findall(r'\S+',str1)
['a', 'b', 'c', 'd']
网友
2楼 ·

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

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

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

网友
3楼 ·

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

相关问题