/ / Verwenden Sie Regex zum Neuformatieren von Text - Ruby, Regex

Verwenden von Regex zum Neuformatieren von Text - Ruby, Regex

Gibt es eine Möglichkeit, Regex zum Neuformatieren einer Zeichenfolge zu verwenden?

Ich habe so eine Saite AEY4293 und ich möchte einen Strich zwischen Buchstaben und Zahlen hinzufügen AEY-4293.

Ich habe versucht etwas zu finden s/pattern/replacement/aber ich konnte es nicht finden.

Ich kann die Blöcke mit auswählen /(w+)(d+)/ wenn ich also ein muster geben könnte, um den text wie neu zu formatieren 1-2 es wäre toll.

Vielen Dank!

Antworten:

2 für die Antwort № 1
irb(main):001:0> "AEY4293".sub(/(D+)(d+)/, "1-2")
=> "AEY-4293"

2 für die Antwort № 2
"AEY4293".sub(/(?<=w)(?=d)/, "-")

Du kannst es auch tun

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

was in der Nähe von MU liegt, ist zu kurz.


1 für die Antwort № 3

Regex wäre:

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

Ersatzmuster wäre:

1-2

Es gibt ein Problem mit dem Ausdruck /(w+)(d+)/, weil w passt sowohl Alpha als auch Zahlen. Also mit Eingabe AEY4293, w+ Wird zusammenpassen AEY429 und d+ wird nachlaufen 3.


1 für die Antwort № 4

Wenn das nicht-numerische Präfix immer aus drei Zeichen besteht, können Sie dies auch ohne regulären Ausdruck tun:

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

Wenn Sie mehr Flexibilität bei der Präfixgröße wünschen, können Sie dies verwenden index kombiniert mit dem oben genannten:

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

Ich mag die Notation für die Klammerzuweisung, da sie gut zu Ihrer Absicht passt.


0 für die Antwort № 5

Da ist ein str.sub(pattern, replacement) Methode dafür. Ersatz ist ein Stich mit 1 und so weiter referenzen.