正则表达式与前导零

时间:2012-12-03 23:29:06

标签: regex

我对正则表达式很新,需要一个简单表达式的帮助。我正在使用Pentaho进行ETL(在字符串转换中替换),我有列值,我需要在数据库导入过程中添加前导零和解析文本。到目前为止,我一直无法添加前导零。

该列名为区域,值为“区域8”“区域10”“区域11” 即可。我的正则表达式是['Region'],它将消除区域文本但产生results =“8”,“10”,“11”。我需要价值来产生“08”,“10”,“11”。所以所有单个数字都必须有前导零。

5 个答案:

答案 0 :(得分:2)

分两步使用:

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

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

前瞻是非消费的,所以你不必费心去反对等等。

答案 1 :(得分:0)

s/^region[0-9][0-9]$/region
s/^region\([1-9]\)$/region0\1

答案 2 :(得分: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, ''),并用0后跟自身替换任何单个数字。您可以使用反向引用($1)执行此操作:.replace(/^(\d)$/, '0$1')

答案 3 :(得分:0)

Javascript示例使用匿名函数检查捕获的数字的值,并将0添加到返回值(如果它是< 1)。 10.例如:

column = "region 8";

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

该函数将整个匹配的字符串s和捕获的部分p1作为参数

答案 4 :(得分:0)

一种perl方式:

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

__DATA__
region 8
region 10
region 11

<强>输出:

08
10
11