我想尝试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