/ Použitie regex na preformátovanie textu - ruby, regex

Použitie regexu na preformátovanie textu - ruby, regex

Existuje spôsob, ako použiť regex na preformátovanie reťazca?

Ja som takýto reťazec AEY4293 a chcem pridať pomlčku medzi písmenami a číslami, ako je toto AEY-4293.

Snažil som sa nájsť niečo podobné s/pattern/replacement/, ale nemohol som to nájsť.

Môžem vybrať bloky pomocou /(w+)(d+)/ takže ak by som mohol dať vzor na preformulovanie textu ako 1-2 to by bolo skvelé.

Vďaka!

odpovede:

2 pre odpoveď č. 1
irb(main):001:0> "AEY4293".sub(/(D+)(d+)/, "1-2")
=> "AEY-4293"

2 pre odpoveď č. 2
"AEY4293".sub(/(?<=w)(?=d)/, "-")

Môžete tiež urobiť

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

ktorý sa blíži mu je príliš krátka odpoveď.


1 pre odpoveď č. 3

Regex by bol:

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

Náhradný vzor by bol:

1-2

Vyskytol sa problém s výrazom /(w+)(d+)/, pretože w zodpovedá alfa a číslam. Takže so vstupom AEY4293, w+ bude sa zhodovať AEY429 a d+ bude sa zhodovať s koncovým 3.


1 pre odpoveď č. 4

Ak je nečíselná predpona vždy tri znaky, môžete to urobiť bez regulárneho výrazu:

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

Alebo ak chcete trochu väčšiu flexibilitu na veľkosť predpony, môžete použiť index v kombinácii s vyššie uvedeným:

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

Páči sa mi, že to je zásluhový zápis, pretože to dobre zodpovedá vášmu zámeru.


0 pre odpoveď č. 5

Existuje a str.sub(pattern, replacement) metódu. Nahradenie je bodnutie s 1 a tak ďalej.