正規表現を使用して文字列を再フォーマットする方法はありますか?
私はこのような文字列をしています AEY4293
文字と数字の間にダッシュを追加したい AEY-4293
.
私は何かを見つけようとしていた s/pattern/replacement/
しかし、私はそれを見つけることができませんでした。
私はブロックを使用して選択することができます /(w+)(d+)/
ですから、もし私がテキストのようなテキストを再フォーマットするパターンを与えることができたら 1-2
それは素晴らしいことだ。
ありがとう!
回答:
回答№1は2irb(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
などの参考文献を参照してください。