我有一个大字符串,我用换行符分割。 如何删除所有空行(仅限空格)?
伪代码:
for stuff in largestring:
remove stuff that is blank
答案 0 :(得分:51)
尝试列表理解和string.strip()
:
>>> mystr = "L1\nL2\n\nL3\nL4\n \n\nL5"
>>> mystr.split('\n')
['L1', 'L2', '', 'L3', 'L4', ' ', '', 'L5']
>>> [line for line in mystr.split('\n') if line.strip() != '']
['L1', 'L2', 'L3', 'L4', 'L5']
答案 1 :(得分:41)
使用正则表达式:
if re.match(r'^\s*$', line):
# line is empty (has only the following: \t\n\r and whitespace)
使用正则表达式+ filter()
:
filtered = filter(lambda x: not re.match(r'^\s*$', x), original)
见codepad。
答案 2 :(得分:14)
我也尝试过regexp和list解决方案,列出一个更快。
这是我的解决方案(通过以前的答案):
text = "\n".join([ll.rstrip() for ll in original_text.splitlines() if ll.strip()])
答案 3 :(得分:10)
编辑:哇,我想省略显而易见的事情是不行的。
lines = bigstring.split()
lines = [line for line in lines if line.strip()]
答案 4 :(得分:4)
如果你不愿意尝试正则表达式(你应该),你可以使用它:
s.replace('\n\n','\n')
重复几次以确保没有空白行。或链接命令:
s.replace('\n\n','\n').replace('\n\n','\n')
答案 5 :(得分:1)
没有建议多线re.sub感到惊讶(哦,因为你已经分裂了你的字符串...但是为什么?):
>>> import re
>>> a = "Foo\n \nBar\nBaz\n\n Garply\n \n"
>>> print a
Foo
Bar
Baz
Garply
>>> print(re.sub(r'\n\s*\n','\n',a,re.MULTILINE))
Foo
Bar
Baz
Garply
>>>
答案 6 :(得分:1)
我的原始文字是: 随着剧情的继续,艾米·庞德(Amy Pond)被绑架,医生正在集结一支军队来营救她。但是,当他和罗里(Rory)穿越银河系,要求长期拖欠债务并郑重地兑现诺言时,他的敌人正在精心掩盖住陷阱。
宋河在她位于风暴笼子里的牢房中不幸地承认,时机终于到了-今天将是“恶魔之战”和“博士”最黑暗的时刻。双方都会作出牺牲,宋河必须最终揭露她最严密的秘密。
我已删除空行,并通过此解决方案将所有行连为一行。
match_p = re.sub(r'\s{2}', '', my_txt) # my_txt is text above
答案 7 :(得分:0)
komodo edit remove blank lines
在科莫多编辑中按Ctrl + H星标记(视为正则表达式),点击上方链接查看快照。
答案 8 :(得分:0)
与@NullUserException相同,这就是我写它的方式:
removedWhitespce = re.sub(r'^\s*$', '', line)
答案 9 :(得分:0)
您可以简单地使用rstrip:
for stuff in largestring:
print(stuff.rstrip("\n")
答案 10 :(得分:0)
到目前为止,我找到的最简单的解决方案是-
for stuff in largestring:
if stuff.strip():
print(stuff)
答案 11 :(得分:0)
使用正向后视正则表达式:
re.sub(r'(?<=\n)\s+', '', s, re.MULTILINE)
当您输入时:
foo
<tab> <tab>
bar
输出将是:
foo
bar
答案 12 :(得分:-2)
while True:
try:
all_lines.remove('')
except ValueError:
break