1

簡単だと思っていた問題につまずいている

aaa a0a 0a0変更する必要があるフィールドがありますaaa aoa oa0

私が持っている正規表現は、またはに変更a0aされていますooa0a0oo0

4

4 に答える 4

4

すべての作業を 1 つの正規表現に入れる必要はありません。読みやすくするために、2 つの異なる正規表現で実行してください。

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

次のコードは、部分文字列を左辺値として使用します。に変更したい場合は、置換に追加し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 に答える
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 に答える
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 に答える