私は文字列を持っています:
10 101/12/201209/12/2012 8 75.00 600.00 2 1RPT/136185RAMADA HOTEL & SUITES
文字列からこの値を取得したい:
136185
を使用しようとしまし/([^\/]*)$/
たが、返されました:
136185RAMADA HOTEL
私は何をすべきか?
using の逆は、次のscan
ように使用しますsplit
。
s = '10 101/12/201209/12/2012 8 75.00 600.00 2 1RPT/136185RAMADA HOTEL & SUITES'
s.split(/\D+/).last # Everything that isn't a number is a separator, take the last one
=> "136185"
ルールが最後の '/' の後の最初の数字である場合、これはビジネスの名前に数字が含まれていても機能します。
s = '10 101/12/201209/12/2012 8 75.00 600.00 2 1RPT/136185MOTEL 6'
s.split(?/).last.to_i # => 136185
「7 Seas Hotel」は引き続き問題を引き起こすことに注意してください
str = "10 101/12/201209/12/2012 8 75.00 600.00 2 1RPT/136185RAMADA HOTEL & SUITES"
str[/\d+(?=\D*\z)/]
# => "136185"
それが最短の解決策かどうかはわかりませんが、うまくいく(\d+)\D*\Z
はずです。
試す
string[/.*\b(\d+)/,1]
これは、数字のグループを照合する前に、できるだけ多くの文字を照合します。単語の境界から始めて、貪欲な人が数字のグループの先頭を.*
食い尽くさないようにします。
または使用する
string.scan(/\d+/).last
これは読みやすくなりますが、純粋な正規表現ではありません。
数値が常に 6 桁の場合は、次を使用します。
'10 101/12/201209/12/2012 8 75.00 600.00 2 1RPT/136185RAMADA HOTEL & SUITES'.split[6].split('/').last[0, 6]
=> "136185"
正規表現ソリューションの潜在的な問題は\d+
、ホテルの名前が7 Seas
.