1

我遇到了一个我认为很容易的问题

我有一个aaa a0a 0a0需要更改为的字段aaa aoa oa0

我拥有的正则表达式正在更改a0aooa0a0oo0

4

4 回答 4

4

您不必将所有工作都放在一个正则表达式中。为了可读性,在两个不同的正则表达式中执行此操作。

s/^0/o/;       # Change 0 to o in first column
s/^(.)0/$1o/;  # Change 0 to o in second column

还有什么比这更清楚的呢?

记住,你不是为今天的你编码,你是为明天的你和明天的其他人编码。

于 2013-02-05T21:50:13.110 回答
1

您可以使用如下表达式:

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
于 2013-02-05T22:07:01.227 回答
1

以下代码使用子字符串作为左值。如果您想转向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";
}
于 2013-02-05T21:44:13.200 回答
0

我认为这应该可以,但我对我的正则表达式有点生疏,所以如果这不是你想要的,所有这些都应该工作(我相信有更多的方法可以实现这一点)

# 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; 
于 2013-02-05T21:50:28.677 回答