我想嘗試Python,我來自Perl。我的第一個例子是一個程序:使用python操作文件
- 閱讀傳遞給程序文件
- 搜索開始以元音總之就是至少4個字符長,其直接跟隨
- 交換這個詞
- 逆所有文件中的行(最後一行成爲第一個)
- 在大寫把一切
- 顯示它在stdout
用Perl我可以這樣寫:
print reverse map uc s/\b(\w+[aeiouy]\w{3,})\s+(\w+)\b/$2 $1/gr, <>;
在Python我寫了這個:
import fileinput
import re
alist = []
for line in fileinput.input():
alist.append(re.sub(r"\b(\w+[aeiouy]\w{3,})\s+(\w+)\b", r"\2 \1", line.upper()))
print "".join(alist[::-1])
它,它寫的正確方法?爲什麼正則表達式在這裏不起作用?
這裏輸入文件的例子:
Suscipit elementum. Nulla accumsan at ex sed viverra.
molestie. In volutpat aliquam massa, vitae arcu ultricies blandit tempus. Donec nisi semper non
commodo nec purus fringilla fringilla. Suspendisse potenti. Vestibulum feugiat a lectus imperdiet
Class aptent taciti sociosqu ad litora per torquent conubia nostra, per inceptos himenaeos. Cras
Phasellus ac condimentum mauris. Sed aliquet leo sagittis nec varius.
和預期輸出:
AC PHASELLUS MAURIS CONDIMENTUM. SED LEO ALIQUET NEC SAGITTIS VARIUS.
CLASS APTENT SOCIOSQU TACITI AD PER LITORA CONUBIA TORQUENT NOSTRA, PER HIMENAEOS INCEPTOS. CRAS
NEC COMMODO FRINGILLA PURUS FRINGILLA. POTENTI SUSPENDISSE. FEUGIAT VESTIBULUM A IMPERDIET LECTUS
MOLESTIE. IN ALIQUAM VOLUTPAT MASSA, ARCU VITAE BLANDIT ULTRICIES TEMPUS. NISI DONEC NON SEMPER
ELEMENTUM SUSCIPIT. ACCUMSAN NULLA AT EX SED VIVERRA.
什麼是ALIST的輸出,你可以給你想要匹配作爲一個例子一些線? – Jaay 2015-02-10 09:24:12
考慮使用Pythex來測試你的輸入的正則表達式:http://pythex.org – 2015-02-10 09:25:18
如果你的正則表達式正在工作(通過測試),那麼考慮把你的Python代碼分解成更小的部分來測試它的工作方式。 – 2015-02-10 09:26:16