Ruby 使用正则表达式获取最后的数字
我有一个字符串:Ruby 使用正则表达式获取最后的数字,ruby,regex,Ruby,Regex,我有一个字符串: 10 101/12/201209/12/2012 8 75.00 600.00 2 1RPT/136185RAMADA HOTEL & SUITES 我想从字符串中获取此值: 136185 我试图使用/([^\/]*)$/,但它返回: 136185RAMADA HOTEL 我该怎么办?试试看 string[/.*\b(\d+)/,1] 这将在匹配一组数字之前匹配尽可能多的字符,从单词边界开始,以确保贪婪的*不会占用数字组的开头 或使用 string.sca
10 101/12/201209/12/2012 8 75.00 600.00 2 1RPT/136185RAMADA HOTEL & SUITES
我想从字符串中获取此值:
136185
我试图使用/([^\/]*)$/
,但它返回:
136185RAMADA HOTEL
我该怎么办?试试看
string[/.*\b(\d+)/,1]
这将在匹配一组数字之前匹配尽可能多的字符,从单词边界开始,以确保贪婪的*
不会占用数字组的开头
或使用
string.scan(/\d+/).last
更具可读性,但不是纯正则表达式。试试看
string[/.*\b(\d+)/,1]
str = "10 101/12/201209/12/2012 8 75.00 600.00 2 1RPT/136185RAMADA HOTEL & SUITES"
str[/\d+(?=\D*\z)/]
# => "136185"
这将在匹配一组数字之前匹配尽可能多的字符,从单词边界开始,以确保贪婪的*
不会占用数字组的开头
或使用
string.scan(/\d+/).last
它更具可读性,但不是一个纯正则表达式。我不知道它是否是最短的解决方案,但
(\d+)\d*\Z
应该有效。我不知道它是否是最短的解决方案,但(\d+)\d*\Z
应该有效。如果数字总是六位数,请使用:
str = "10 101/12/201209/12/2012 8 75.00 600.00 2 1RPT/136185RAMADA HOTEL & SUITES"
str[/\d+(?=\D*\z)/]
# => "136185"
'10 101/12/201209/12/2012 8 75.00 600.00 2 1RPT/136185RAMADA HOTEL & SUITES'.split[6].split('/').last[0, 6]
=> "136185"
任何正则表达式解决方案的潜在问题是,如果酒店名称类似于
7 Seas
,则数字+酒店名称可能会导致使用\d+
的解决方案返回错误值。如果数字始终是六位数字,请使用:
'10 101/12/201209/12/2012 8 75.00 600.00 2 1RPT/136185RAMADA HOTEL & SUITES'.split[6].split('/').last[0, 6]
=> "136185"
任何正则表达式解决方案的潜在问题是,如果酒店的名称类似于
7 Seas
,使用scan
的相反方法是使用split
,则使用\d+
的解决方案可能会返回错误的值:
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
请注意,“七海酒店”仍然会导致问题使用
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
请注意,“七海酒店”仍然会导致问题部分选择第一个匹配组。我猜网站会向你展示完整的比赛,而不仅仅是小组赛。请使用我提供的完整表达式使用
irb
重试。[…,1]
部分选择第一个匹配组。我猜网站会向你展示完整的比赛,而不仅仅是小组赛。请使用我提供的完整表达式使用irb
再试一次。您应该下载测试正则表达式的伟大程序。这个答案有效:)您应该下载测试正则表达式的伟大程序。这个答案有效:)这个数字总是六位数吗?如果短一点,酒店名称是“7海”,会发生什么?这个数字总是六位数吗?如果更短,酒店名称为“7海”,会发生什么?