Regex Adición de ceros finales

Estoy intentando agregar ceros a una serie de números en la transformación de datos.

Básicamente tengo algo como esto:

1234
2345
3456
4567

Y en lo que quiero transformarme es

12340000
23450000
34560000
45670000

Lo que he intentado hasta ahora es

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

Sería genial si alguien me puede ayudar.

preguntado el 04 de julio de 12 a las 03:07

¿Cuál es el idioma / motor? -

Estoy usando una herramienta de transformación llamada Pentaho, que usa el estándar java regex. -

¿Son los reemplazos de expresiones regulares realmente más fáciles que simplemente multiplicar números por 10000? También... ¿Pentaho? los Página de ejemplo de Hello World en su wiki habla de "el objetivo de tu primera transformación". No puedo ser el único que le tenga miedo a este idioma. -

@ghoti esta no es mi primera transformación, y pentaho no es tan difícil, si tiene millones de registros en CSV y necesita importarlos a una base de datos, es una de las mejores herramientas para usar. Pero la idea de multiplicar por 10000 podría ser la solución más fácil y gracias por ese consejo. -

Acabo de intentar expresiones regulares: $y reemplazar con 0000. Funciona, pero es tan propenso a errores que no estoy seguro si me siento cómodo usándolo. Sigo pensando que la respuesta de ghoti multiplicando 10K es probablemente la mejor idea. -

4 Respuestas

Si tiene estos campos como números, la solución @ghoti de multiplicarlos por 10000 suena mejor. Pero si los tiene como cadenas, realmente no sé qué comportamiento le gustaría para una cadena con menos o más de 4 caracteres, por ejemplo. "123" o "98765" (ya que no lo definió en su pregunta).

1- Si desea convertirlo en "1230000"/"987650000" (simplemente concatenar 4 ceros), puede usar un paso de calculadora, creando un campo constante temporal "0000" en lugar de crear un campo que sea la suma de su campo original y este campo temporal;

2- Si desea convertirlo en "12300000"/"98765000" (ambos de 8 caracteres), puede usar un paso de Operaciones de cadena seleccionando Padding = right, Pad char = 0 y Pad Length = 9 (no me pregunten por qué 9 y no 8).

Ambos pasos son realmente útiles para las operaciones con cadenas, espero que te ayuden.

Respondido el 18 de Septiembre de 12 a las 22:09

No encontré ninguna de las soluciones aquí como una buena solución, porque todos son un enfoque un tanto pirateado sobre cómo hacer una búsqueda y reemplazo de expresiones regulares, y porque cómo se formula la cadena de reemplazo de expresiones regulares, es imposible para mí en realidad hacerlo con expresiones regulares. Por lo tanto, creo que su solución de múltiplos por 10000 terminó siendo la solución más sencilla, por lo que acepto esta respuesta como una solución alternativa. - iglesia

Esto funcionó para mí en Notepad ++

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

Lo probé con $1$20000 y no funcionó :(

Otro método que funcionó fue el siguiente

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

Esto también funcionó

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

Respondido 04 Jul 12, 04:07

Intenté el reemplazo $1(0000) también, y eso me devolvió 1234(0000), las herramientas de transformación solo me permiten una transformación de un solo paso, por lo que de alguna manera necesito hacerlo correctamente la primera vez. - iglesia

¿Qué tal la expresión regular? (?<=^\d+)$ y el simple reemplazo 0000? Eso no coincidirá con los números existentes, solo garantiza que estén allí antes de la posición de coincidencia de ancho cero al final de la línea.

Respondido 04 Jul 12, 05:07

Si no tiene coincidencia, entonces no puede reemplazar. Probé tu ejemplo. No puede encontrar nada, por lo tanto, nunca se reemplazó. - iglesia

Me parece que debería usar una función de almohadilla, por ejemplo, una de las que están en el paso de javascript modificado, en lugar de cualquier tipo de expresión regular.

Respondido 05 Jul 12, 16:07

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.