2012-07-04 100 views
4

我试图在零数据转换中填充一系列数字。正则表达式添加尾随零

基本上,我有这样的事情:

1234 
2345 
3456 
4567 

而且我想改变的就是

12340000 
23450000 
34560000 
45670000 

我已经试过到目前为止

regex: ^(.+)$ 
replace: $1/0000 => 1234/0000 
replace: $10000 => NOTHING 
replace: $1\0000 => 1234\0000 

将是巨大的如果有人能帮助我。

+1

什么是语言/引擎? –

+0

我正在使用转换工具调用Pentaho,它使用我相信Java正则表达式标准。 – Churk

+2

正则表达式替换真的比单纯乘以10000更容易吗?另外...... Pentaho? [他们wiki上的Hello World示例页面](http://wiki.pentaho.com/display/EAI/03.+Hello+World+Example)谈到“第一次转换的目标”。我不能成为唯一一个害怕这种语言的人。 – ghoti

回答

0

如果你有这些字段作为数字,@ ghoti乘以10000的解决方案听起来是最好的。 但是,如果你有他们作为字符串,我真的不知道什么样的行为,你想要一个字符串少于或超过4个字符前。 “123”或“98765”(因为你没有在你的问题上定义它)。

1-如果你想把它变成“1230000”/“987650000”(只是concat 4个零),那么你可以使用Calculator步骤创建一个临时常量字段“0000”,而不是创建一个字段你原来的领域和这个临时领域;如果你想把它变成“12300000”/“98765000”(都是8个字符),那么你可以使用字符串操作步骤,选择Padding = right,Pad char = 0和Pad Length = 9(don'不问问为什么9而不是8)。

这两个步骤对字符串操作来说都非常有用,希望它们能帮助你。

+0

我没有在这里找到任何解决方案作为一个很好的解决方案,因为他们都是有点hack'ish方法如何做一个正则表达式搜索和替换,并且因为如何正则表达式替换字符串是公式化,这是不可能的真正用正则表达式来完成它。因此,我认为你的10000以上的解决方案最终是最简单的工作,所以我接受这个答案作为解决方法。 – Churk

0

这为我在记事本++

regex: ^(.+)$ 
replace: \1\20000 

我用$ 1 $ 20000尝试过了,它没有工作:(

奏效的另一种方法是在下列

regex: ^(.+)$ 
replace: $1z0000 
regex: ^(.+)z(0000)$ 
replace: $1$2 

这个工作太

regex: ^(.+)$ 
replace: $1(0000) 
+0

我也尝试过替换'$ 1(0000)',并且返回给我'1234(0000)',转换工具只允许我进行单遍转换,所以我需要以某种方式第一次正确地做到这一点。 – Churk

0

如何使用正则表达式(?<=^\d+)$和简单替换0000?这不符合现有的数字,它只是确保它们在行尾的零宽度匹配位置之前。

+0

如果您没有匹配,则无法替换。我测试了你的例子。它找不到任何东西,因此替换从未发生过。 – Churk

0

对我来说,你应该使用垫功能,例如其中一个在修改的javascript步骤中,而不是任何类型的正则表达式。