[英]Remove unmixed numbers from file
假設我有一個名為input.txt的文件,看起來像這樣
I listened to 4 u2 albums today
meet me at 5
squad 4ever
我想過濾掉自己的數字,所以“4”和“5”應該去,但“u2”和“4ever”應保持不變。 即輸出應該是
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='')
這與我在這里找到的代碼非常相似: 刪除與字母串中的字母混合的數字
但我得到的不是想要的輸出
I listened to u2 albums today
meet me at 5
squad 4ever
正如你所看到的,這里有兩個問題,首先只有第一行丟失我希望它丟失的數字,第二行仍然存在“5”。 第二個問題是新行開頭的額外空白區域。
我已經玩了一段時間的代碼和瀏覽stackoverflow,但無法找到問題的來源。 任何見解?
str.split(' ')
不會刪除每行的尾隨換行符。 他們最終依附於該行的最后一個字。 因此,對於您的第一個問題, '5'
不會被刪除,因為它實際上是'5\\n'
,並且\\n
不是數字。
第二個問題是相關的。 當您打印每行的最后一個單詞時,它包含該換行符,並且您在末尾添加了一個空格。 該空間顯示為下一行的第一個字符。
最簡單的解決方案就是將line.split(' ')
更改為line.split()
。 沒有任何參數, split()
將刪除所有空格,包括換行符。 您還需要從print
刪除end=''
,以便重新添加換行符。
只需使用正則表達式。
re.sub(r"\b\d+\b", "", input)
匹配單詞邊界之間的任何數字
或者避免雙重空格:
re.sub(r"\s\d+\s", " ", input)
你可以使用正則表達式:
data = open('file.txt').read()
import re
data = re.sub('(?<=\s)\d+(?=$)|(?<=^)\d+(?<=\s)|(\s\d+\s)', '', data)
輸出:
I listened tou2 albums today
meet me at
squad 4ever
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.