Regex 前导为零的正则表达式

Regex 前导为零的正则表达式,regex,Regex,我对正则表达式比较陌生,需要一个简单表达式的帮助。我正在使用Pentaho进行ETL(字符串转换中的替换),我有一些列值需要添加前导零,并在数据库导入过程中解析文本。到目前为止,我无法添加前导零 该列称为区域,值为“区域8”,“区域10”,“区域11”。我的正则表达式是['Region'],它将消除区域文本,但会生成结果=“8”、“10”、“11”。我需要值来生成“08”、“10”、“11”。因此,所有的一位数必须有前导零。您必须使用反向引用和多次检查,但这是可能的。下面是一个使用JavaScr

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


该列称为区域,值为“区域8”“区域10”“区域11”。我的正则表达式是['Region'],它将消除区域文本,但会生成结果=“8”、“10”、“11”。我需要值来生成“08”、“10”、“11”。因此,所有的一位数必须有前导零。

您必须使用反向引用和多次检查,但这是可能的。下面是一个使用JavaScript的示例:

s/^region[0-9][0-9]$/region
s/^region\([1-9]\)$/region0\1
"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"

第一步是删除所有非数字字符
。替换(/\D/g')
,并将任何单个数字替换为后跟其自身的0。您可以使用反向引用(
$1
)执行此操作:
。替换(/^(\d)$/,'0$1')
分两步使用前瞻:

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

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

前瞻性是非消耗性的,因此您不必担心反向引用等。

Javascript示例使用匿名函数检查捕获的数字的值,如果返回值<10,则向返回值添加
0
。例如:

column = "region 8";

column.replace(/region (\d+)/, function(s, p1){return parseInt(p1) < 10 ? '0' + p1 : p1});
column=“区域8”;
replace(/region(\d+)/,函数(s,p1){return parseInt(p1)<10?'0'+p1:p1});
该函数将整个匹配字符串
s
和捕获的部分
p1
作为参数

以perl的方式执行:

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

__DATA__
region 8
region 10
region 11

这是最接近的解决方案,但仍然没有达到我需要的效果。regex1不会在一个数字上加零,regex2会解析出“region”,但结果是region1、region6等等。感谢大家的回复。我的解决方案是使用正则表达式(在字符串转换中替换)将整个单词“Region”替换为0。我添加了一个java表达式转换,以消除数字前的前导零。expr-012、06等之后的初始结果,长度为2和3,具体取决于。我只需要最后两个数字,并通过javascript转换检索它们。var-str=区域b;var n=str.slice(-2);
08
10
11