如何用Python一行代码替换Perl一行代码的正则表达式?

5

我正在参与一个项目,该项目不使用Perl语言,我希望保持一致性。因此,我想知道是否可以轻松地用Python one-liner替换这个方便的Perl one-liner

perl -pe 's/pattern/replacement/g' <<< 'expression'

这个程序逐行读取标准输入,将所有正则表达式匹配项pattern替换为字符串replacement,并将(可能)修改后的行输出到标准输出。


尝试使用re.findall了吗? - Luis Henrique
sed通常是替代的标准工具。 - Shawn
然而,我希望能够使用Python正则表达式引擎。 - simhumileco
2个回答

6

你可以使用re.sub命令行选项-c运行,但它不像perl一样美观:

python -c 'import re;print(re.sub(r"<pattern>", "<replacement>", "<string>"))'

如果你想从标准输入(STDIN)中获取输入,你需要使用sys.stdin,这也意味着你需要导入sys

python -c 'import re,sys;print(re.sub(r"<pattern>", "<replacement>", sys.stdin.read()))' <<< '<string>'

因此,例如:
% python -c 'import re;print(re.sub(r"foo", "bar", "foobar"))'
barbar

% python -c 'import re,sys;print(re.sub(r"foo", "bar", sys.stdin.read()))' <<< 'foobar'
barbar

2

一个更现代的Perl一行代码替代品是Ruby,有些人说它就是Perl 6。例如:

ruby -pe 'gsub /[es]/, "X"' <<< 'expression'

由于Python对缩进的依赖,它不适合单行代码,特别是当您需要在代码中使用“if ... else ...”等条件语句时。


实际上,Raku 就是 Perl 6 :) - beasy

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接