0

我有一个字符串:

10 101/12/201209/12/2012 8 75.00 600.00 2 1RPT/136185RAMADA HOTEL & SUITES 

我想从字符串中获取这个值:

136185

我尝试使用/([^\/]*)$/,但它返回:

136185RAMADA HOTEL  

我应该怎么办?

4

5 回答 5

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”仍然会引起问题

于 2013-01-15T00:41:16.360 回答
1
str = "10 101/12/201209/12/2012 8 75.00 600.00 2 1RPT/136185RAMADA HOTEL & SUITES"

str[/\d+(?=\D*\z)/]
# => "136185"
于 2013-01-14T23:22:49.953 回答
1

我不知道这是否是最短的解决方案,但(\d+)\D*\Z应该可以。

于 2013-01-14T23:23:53.947 回答
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.

于 2013-01-15T00:40:03.427 回答
0

尝试

string[/.*\b(\d+)/,1]

这在匹配一组数字之前匹配尽可能多的字符,从单词边界开始以确保贪婪.*不会吃掉数字组的开头。

或使用

string.scan(/\d+/).last

这更具可读性,但不是纯正则表达式。

于 2013-01-14T23:13:29.703 回答