假设我有一个叫做输入.txt看起来像这样
I listened to 4 u2 albums today
meet me at 5
squad 4ever
我想过滤掉独立的数字,所以“4”和“5”应该去掉,但“u2”和“4ever”应该保持不变。i、 e输出应为
I listened to u2 albums today
meet me at
squad 4ever
我一直在尝试使用这个代码
for line in fileinput.input("input.txt", inplace=True):
new_s = ""
for word in line.split(' '):
if not all(char.isdigit() for char in word):
new_s += word
new_s += ' '
print(new_s, end='')
这与我在这里找到的代码非常相似:Removing numbers mixed with letters from string
但是我得到的不是想要的结果
I listened to u2 albums today
meet me at 5
squad 4ever
正如你所看到的,这里有两个问题,第一,只有第一行丢失了我想要丢失的数字,“5”仍然存在于第二行。第二个问题是新行开头的多余空格。你知道吗
我已经在代码上玩了一段时间,浏览了stackoverflow,但是找不到问题出在哪里。有什么见解吗?你知道吗
只需使用regexp。你知道吗
匹配单词边界之间的任何数字
或避免双重空间:
str.split(' ')
不会从每一行中删除后面的换行符。他们最后连到最后一句话。所以对于第一个问题,'5'
不会被删除,因为它实际上是'5\n'
,而\n
不是一个数字。你知道吗第二个问题是相关的。当你打印每行的最后一个单词时,它包含了那条换行符,而且你在结尾加了一个空格。该空格显示为下一行的第一个字符。你知道吗
最简单的解决方案就是将
line.split(' ')
更改为line.split()
。如果没有任何参数,split()
将删除所有空格,包括换行符。您还需要从print
中删除end=''
,以便将换行添加回。你知道吗您可以使用正则表达式:
输出:
相关问题 更多 >
编程相关推荐