我试图将一些文件名大写,并对其应用一些例外。我有一系列的替换,其中一个是
s/b(vs|etc)[.]?b/L$1./gir
我想匹配任何出现的"vs"或";Vs"或"vs !"或"VS !"或"等!"或";Etc"等等......如果源字符串已经有一个句号(例如。&;Vs.&;)那么我就不想加一个,否则我就想加一个。字符串的结果部分也需要小写,以便唯一有效的输出是vs.
或etc.
。
这可能只是一个微不足道的变化,但我就是找不到它。谁能告诉我这个正则表达式是怎么组装的?
请记住,单词边界的含义与上下文有关。
在这里,您需要将可选.
之前的单词边界移动为.b
(即,当etc
之后有.
时)只有在.
之后有字母,数字或_
时才会匹配。
所以你可以用
s/b(vs|etc)b.?/L$1./gir
查看Perl在线演示:
#!/usr/bin/perl
use feature 'say';
use strict;
use warnings;
my $str = "vs or Vs or vs. or VS. or etc avs and metch";
say $str =~ s/b(vs|etc)b.?/L$1./gir;
# => vs. or vs. or vs. or vs. or etc. avs and metch