我有一个字符串:
10 101/12/201209/12/2012 8 75.00 600.00 2 1RPT/136185RAMADA HOTEL & SUITES
我想从字符串中获取此值:
136185
我尝试使用/([^\/]*)$/
,但它返回了:
136185RAMADA HOTEL
我该怎么办?
答案 0 :(得分:1)
str = "10 101/12/201209/12/2012 8 75.00 600.00 2 1RPT/136185RAMADA HOTEL & SUITES"
str[/\d+(?=\D*\z)/]
# => "136185"
答案 1 :(得分:1)
我不知道它是否是最短的解决方案,但(\d+)\D*\Z
应该有效。
答案 2 :(得分:1)
使用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”仍将导致问题
答案 3 :(得分:0)
尝试
string[/.*\b(\d+)/,1]
在匹配一组数字之前匹配尽可能多的字符,从单词边界开始,以确保贪婪的.*
不会占用数字组的开头。
或使用
string.scan(/\d+/).last
更具可读性,但不是纯正则表达式。
答案 4 :(得分:0)
如果数字总是六位数,请使用:
'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
的解决方案返回错误值。