/ / Usando regex para reformatear texto - ruby, regex

Usando regex para reformatear texto - ruby, regex

¿Hay una manera de usar expresiones regulares para reformatear una cadena?

Tengo una cuerda como esta AEY4293 y quiero agregar un guión entre letras y números, como este AEY-4293.

Estaba tratando de encontrar algo como s/pattern/replacement/, pero no pude encontrarlo.

Puedo seleccionar los bloques usando /(w+)(d+)/ así que si pudiera dar un patrón para reformatear el texto como 1-2 que sería genial.

¡Gracias!

Respuestas

2 para la respuesta № 1
irb(main):001:0> "AEY4293".sub(/(D+)(d+)/, "1-2")
=> "AEY-4293"

2 para la respuesta № 2
"AEY4293".sub(/(?<=w)(?=d)/, "-")

Tambien puedes hacer

"AEY4293".sub(/(?=d)/, "-")

que se acerca a mu es una respuesta demasiado corta.


1 para la respuesta № 3

Regex sería:

/([A-Z]+)(d+)/

El patrón de reemplazo sería:

1-2

Hay un problema con la expresión /(w+)(d+)/, porque w coincide con alfa y números. Entonces, con entrada AEY4293, w+ coincidirá AEY429 y d+ coincidirá con el final 3.


1 para la respuesta № 4

Si el prefijo no numérico es siempre de tres caracteres, puede hacerlo sin una expresión regular:

s = "AEY4293"
s[3,0] = "-"
# s is now "AEY-4293"

O, si desea un poco más de flexibilidad en el tamaño del prefijo, puede usar index combinado con lo anterior:

s[s.index(/d/), 0] = "-"

Me gusta la notación de asignación de corchetes para esto, ya que coincide muy bien con su intención.


0 para la respuesta № 5

Hay un str.sub(pattern, replacement) método para eso El reemplazo es una picadura con 1 y así sucesivamente referencias.