¿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 № 1irb(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.