我对正则表达式很新,需要一个简单表达式的帮助。我正在使用Pentaho进行ETL(在字符串转换中替换),我有列值,我需要在数据库导入过程中添加前导零和解析文本。到目前为止,我一直无法添加前导零。
该列名为区域,值为“区域8”,“区域10”,“区域11” 即可。我的正则表达式是['Region'],它将消除区域文本但产生results =“8”,“10”,“11”。我需要价值来产生“08”,“10”,“11”。所以所有单个数字都必须有前导零。
答案 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