我遇到了一个我认为很容易的问题
我有一个aaa a0a 0a0
需要更改为的字段aaa aoa oa0
我拥有的正则表达式正在更改a0a
为ooa
0a0
oo0
您不必将所有工作都放在一个正则表达式中。为了可读性,在两个不同的正则表达式中执行此操作。
s/^0/o/; # Change 0 to o in first column
s/^(.)0/$1o/; # Change 0 to o in second column
还有什么比这更清楚的呢?
记住,你不是为今天的你编码,你是为明天的你和明天的其他人编码。
您可以使用如下表达式:
s/\b0|(?<=\b\S)0/o/g;
例子:
perl -E "$_='aaa a0a 0a0 000'; say; s/\b0|(?<=\b\S)0/o/g; say"
输出:
aaa a0a 0a0 000
aaa aoa oa0 oo0
以下代码使用子字符串作为左值。如果您想转向00a
,请ooa
添加/g
到替换中。
#!/usr/bin/perl
use warnings;
use strict;
my @ar = qw/aaa a0a 0a0 00a/;
for my $field (@ar) {
substr($field, 0, 2) =~ s/0/o/; # Only applied to the substring!
print "$field\n";
}
我认为这应该可以,但我对我的正则表达式有点生疏,所以如果这不是你想要的,所有这些都应该工作(我相信有更多的方法可以实现这一点)
# replace all zeros providing they are followed by an aplhanumeric character
s/0(?=\w)/o/g;
# same as the above except reverted, replace zeros if not followed by space
s/0(?!\s)/o/g;
# replace 0 followed by word non-boundary
s/0\B/o/g;