我有一个脚本的Perl片段,我正在翻译成Python.我不知道"s!" 操作员正在做; 某种正则表达式替换.不幸的是,搜索谷歌或Stackoverflow这样的运营商并没有产生很多有用的结果.
$var =~ s!<foo>.+?</foo>!!;
$var =~ s!;!/!g;
Run Code Online (Sandbox Code Playgroud)
每条线路做什么?我想知道以防我再次遇到这个操作员.
而且,Python中的等效语句是什么?
sep*_*p2k 15
s!foo!bar!与更常见的相同s/foo/bar/,除了foo和bar可以包含未转义的斜杠而不会引起问题.它的作用是,用bar替换正则表达式foo的第一次出现.带有g的版本替换了所有出现的内容.
Bri*_*new 13
它完全一样$var =~ s///.即在$var变量内执行搜索和替换.
在Perl中,您可以在后面定义分隔符s.为什么?因此,例如,如果您匹配'/',则可以指定另一个分隔符(在这种情况下为'!'),而不必转义或回退您匹配的字符.否则你最终会说(比如说)
s/;/\//g;
Run Code Online (Sandbox Code Playgroud)
这有点令人困惑.
Perlre有更多关于此的信息.
Cha*_*ens 10
Perl允许您为其许多构造选择分隔符.这样可以更容易地查看表达式中的内容
$str =~ s{/foo/bar/baz/}{/quux/};
Run Code Online (Sandbox Code Playgroud)
如您所见,并非所有分隔符都具有相同的效果.包围字符(<>,[],{}和())使用不同的字符的开始和结束.并且?,当用作正则表达式的分隔符时,导致正则表达式在对reset()运算符的调用之间仅匹配一次.
您可能会发现它有助于阅读perldoc perlop(特别是在部分m/PATTERN/msixpogc,?PATTERN?以及S/PATTERN/REPLACEMENT/msixpogce).