Techioz Blog

Ruby で、前の文字のみがわかっており、最大 2 桁の文字列内で整数を見つける方法

概要

次のような文字列があります

x = '4x4 @ 32" hjy w/ R43 potter'
x = '4x4 @ 32" hjy w/ R4 26 potter'
x = 'Restful4 4 @ 32" hjy R8 26 potter'

先頭に R が付いた数字、つまり最初の数字から 43、2 番目の数字から 4、3 番目の数字から 8 を取得する必要があります。

大文字の R が保証されます。

Index(‘R’) を使用して取得できますが、すべてのケースに対処するのは面倒です。

matchしてみましたが、うまくいかないようでした。何か案は?

これを試してみました:

sFind = x.match /(?<name>R \d+) /
debug=debug+sFind[:name].to_s + "\n"

デバッグでエラーが発生する

解決策

もうすぐ完成です。R と の間の空白を削除するだけです。

x = '4x4 @ 32" hjy w/ R43 potter'

x.match /(?<name>R \d+) / #=> nil
x.match /(?<name>R\d+) /  #=> #<MatchData "R43 " name:"R43">

キャプチャ グループをすぐに抽出できる String#[] もあります。

x[/(?<name>R\d+) /, :name] #=> "R43"

数字のみを取得するには:

x[/R(?<name>\d+) /, :name] #=> "43"

または、名前付きキャプチャを使用しないことで少し短くなります。

x[/R(\d+)/, 1] #=> "43"

いわゆる肯定後読みアサーションを使用して、R を含めずに R が先行する数字を照合することもできます。

x[/(?<=R)\d+/] #=> "43"