/ / regexを使ってテキストを再フォーマットする - ruby​​、regex

regexを使ってテキストを再フォーマットする - ruby​​、regex

正規表現を使用して文字列を再フォーマットする方法はありますか?

私はこのような文字列をしています AEY4293 文字と数字の間にダッシュを追加したい AEY-4293.

私は何かを見つけようとしていた s/pattern/replacement/しかし、私はそれを見つけることができませんでした。

私はブロックを使用して選択することができます /(w+)(d+)/ ですから、もし私がテキストのようなテキストを再フォーマットするパターンを与えることができたら 1-2 それは素晴らしいことだ。

ありがとう!

回答:

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

回答№2については2
"AEY4293".sub(/(?<=w)(?=d)/, "-")

あなたもすることができます

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

ミューに近づくのは短すぎる "答えです。


回答№3の場合は1

正規表現は:

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

置換パターンは次のようになります。

1-2

式に問題があります /(w+)(d+)/、なぜなら、 w アルファと数字の両方に一致します。 だから、入力 AEY4293, w+ 一致する AEY429 そして d+ 末尾に一致します 3.


回答№4の場合は1

非数値のプレフィックスは常に3つの文字であるなら、あなたは正規表現せずにそれを行うことができます。

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

また、接頭辞のサイズを少し柔軟にしたい場合は、 index 上記と組み合わせる:

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

私はあなたの意図とうまく一致するので、これのための大括弧割り当て表記が好きです。


回答№5の場合は0

ある str.sub(pattern, replacement) それのための方法。交換は 1 などの参考文献を参照してください。