在Python中拆分具有未知数量空格的字符串作为分隔符

Posted

技术标签:

【中文标题】在Python中拆分具有未知数量空格的字符串作为分隔符【英文标题】:Split a string with unknown number of spaces as separator in Python 【发布时间】:2011-05-17 14:49:56 【问题描述】:

我需要一个类似于str.split(' ') 的函数,但可能有多个空格,并且有意义的字符之间的空格数不同。像这样的:

s = ' 1234    Q-24 2010-11-29         563   abc  a6G47er15        '
ss = s.magic_split()
print(ss)  # ['1234', 'Q-24', '2010-11-29', '563', 'abc', 'a6G47er15']

我可以使用正则表达式来捕捉它们之间的空格吗?

【问题讨论】:

【参考方案1】:

这里也可以使用regex的split方法。

import re

sample = ' 1234    Q-24 2010-11-29         563   abc  a6G47er15        '

word_list = re.split("\s+", sample.strip())

print(word_list) #['1234', 'Q-24', '2010-11-29', '563', 'abc', 'a6G47er15']

我希望这可能对某人有所帮助

【讨论】:

【参考方案2】:
s = ' 1234    Q-24 2010-11-29         563   abc  a6G47er15        '
ss = s.split()
print(ss)  # ['1234', 'Q-24', '2010-11-29', '563', 'abc', 'a6G47er15']

【讨论】:

【参考方案3】:

如果您不向str.split() 传递任何参数,它会将空格的运行视为单个分隔符:

>>> ' 1234    Q-24 2010-11-29         563   abc  a6G47er15'.split()
['1234', 'Q-24', '2010-11-29', '563', 'abc', 'a6G47er15']

如果你愿意的话

>>> class MagicString(str):
...     magic_split = str.split
... 
>>> s = MagicString(' 1234    Q-24 2010-11-29         563   abc  a6G47er15')
>>> s.magic_split()
['1234', 'Q-24', '2010-11-29', '563', 'abc', 'a6G47er15']

【讨论】:

请注意,如果没有参数,split() 会在“任何空白”上拆分,因此制表符(例如)也将被视为分隔符(并作为单个分隔符被吸收到制表符空间序列中)。 如果这确实是个问题(几乎从来没有)那么[subs for subs in s.split(' ') if s]【参考方案4】:

这个问题有很多解决方案。

1.) 使用 split() 是最简单的方法

s = ' 1234    Q-24 2010-11-29         563   abc  a6G47er15              '
s = s.split()
print(s)


Output >> ['1234','Q-24','2010-11-29','563','abc','a6G47er15']

2.) 还有另一种方法可以使用 findall() 方法解决此问题,您需要在 python 文件的开头“导入 re”。

import re
def MagicString(str):
    return re.findall(r'\S+', str)
s = ' 1234    Q-24 2010-11-29         563   abc  a6G47er15'
s = MagicString(s)
print(s)
print(MagicString('    he  ll   o'))


Output >> ['1234','Q-24','2010-11-29','563','abc','a6G47er15']
Output >> ['he','ll','o']

3.) 如果您想单独删除任何前导(开头的空格)和尾随(末尾的空格),请使用 strip()。

s = '   hello          '
output = s.strip()
print(output)


Output >> hello

【讨论】:

【参考方案5】:

用多个空格分割行,同时在字符串中保留单个空格:

with open("textfile.txt") as f:
   for line in f:
      line = [i.strip() for i in line.split('  ') if i]
      print(line)

【讨论】:

如果字符串中有连续 4 个空格,则结果中会出现空字符串。【参考方案6】:

如果您的数据中有单个空格(例如一个字段中的地址),当分隔符有两个或多个空格时,这里有一个解决方案:

with open("textfile.txt") as f:
    content = f.readlines()

    for line in content:
        # Get all variable-length spaces down to two. Then use two spaces as the delimiter.
        while line.replace("   ", "  ") != line:
            line = line.replace("   ", "  ")

        # The strip is optional here.
        data = line.strip().split("  ")
        print(data)

【讨论】:

以上是关于在Python中拆分具有未知数量空格的字符串作为分隔符的主要内容,如果未能解决你的问题,请参考以下文章

如何在python中拆分具有多个分隔符的字符串? [复制]

调用具有未知数量参数Python的函数

R拆分由不同数量的空格分隔的一列字符

正则表达式具有未知数量参数的字符串

C#将具有随机空格的字符串拆分为字符串数组[关闭]

在 Python 中,如何将字符串拆分为多个整数?