3

I'm rather new to regex expressions and need help with a simple expression. I'm using Pentaho for ETL (Replace in String transformation) and I have column values that I need to add leading zeros to and parse out text as part of the database import. So far I have been unable to add the leading zero.

The column is called Region and the values are "region 8", "region 10", "region 11". My regex expression is ['Region'] which will eliminate the region text but produces results = "8", "10", "11". I need values to produce "08", "10", "11". So all the single digit numbers must have leading zeros.

4

5 に答える 5

2

2 つのステップで先読みを使用します。

Regex 1:   region (?=\d\D)
Replace 1: 0

Regex 2:   region (?=\d\d)
Replace 2: (nothing)

先読みは非消費であるため、後方参照などを気にする必要はありません。

于 2012-12-04T01:55:02.123 に答える
0

後方参照と複数のチェックを使用する必要がありますが、それは可能です。JavaScriptを使用した例を次に示します。

"region 8".replace(/\D/g, '').replace(/^(\d)$/, '0$1');
//returns "08"

"region 18".replace(/\D/g, '').replace(/^(\d)$/, '0$1');
//returns "18"

"region 188".replace(/\D/g, '').replace(/^(\d)$/, '0$1');
//returns "188"

最初のステップは、数字以外のすべての文字を削除し.replace(/\D/g, '')、1桁を0に置き換えてからそれ自体を置き換えることです。これは、後方参照($1)を使用して行うことができます。.replace(/^(\d)$/, '0$1')

于 2012-12-03T23:47:06.253 に答える
0

それを行うためのPerlの方法:

while(<DATA>) {
    chomp;
    s/\D+//g;
    printf("%02d\n", $_);
}

__DATA__
region 8
region 10
region 11

出力:

08
10
11
于 2012-12-04T12:16:32.857 に答える
0
s/^region[0-9][0-9]$/region
s/^region\([1-9]\)$/region0\1
于 2012-12-03T23:33:00.520 に答える
0

匿名関数を使用してキャプチャされた数値の値をチェックし、010 未満の場合は戻り値に a を追加する Javascript の例。

column = "region 8";

column.replace(/region (\d+)/, function(s, p1){return parseInt(p1) < 10 ? '0' + p1 : p1});

この関数は、一致した文字列全体とsキャプチャされた部分p1をパラメーターとして受け取ります

于 2012-12-04T11:02:42.153 に答える