在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中拆分具有未知数量空格的字符串作为分隔符的主要内容,如果未能解决你的问题,请参考以下文章