[英]Regular Expression in python doesn't work
我正在寫《 Python for Informatics 》一書中的練習,該書要求我編寫一個程序來模擬grep命令在UNIX上的操作。 但是,我的代碼不起作用。 在這里,我簡化了代碼,僅打算計算以“查找”一詞開頭的行數。 我很困惑,希望您能對此有所啟發。
from urllib.request import urlopen
import re
fhand = urlopen('http://www.py4inf.com/code/mbox-short.txt')
sumFind = 0
for line in fhand:
line = str(line) #convert from byte to string for re operation
if re.search('^From',line) is not None:
sumFind+=1
print(f'There are {sumFind} lines that match.')
腳本的輸出是
有0條匹配的行。
這是輸入文本的鏈接: 文本
非常感謝您的寶貴時間。
錯誤是使用str
將字節轉換為字符串。
>>> str(b'foo')
"b'foo'"
您將需要
line = line.decode()
但是最好的方法是將字節正則表達式傳遞給正則表達式,這是受支持的:
for line in fhand:
if re.search(b'^From',line) is not None:
sumFind+=1
現在我有54場比賽。
請注意,您可以將整個循環簡化為:
sum_find = sum(bool(re.match(b'From',line)) for line in fhand)
re.match
取代了在搜索中使用^
的需要 sum
計數re.match
返回真實值的時間(明確轉換為bool
因此可以求和0或1) 甚至沒有正則表達式也更簡單:
sum_find = sum(line.startswith(b"From") for line in fhand)
您的問題是urllib模塊從url / text文件返回字節而不是字符串。
您可以:
使用請求模塊將文件下載為字符串並按行分割:
匯入要求
txt = requests.get(' http://www.py4inf.com/code/mbox-short.txt ').text.split('\\ n')
對於txt中的行:...
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.