如何使用Ruby查找字符串中最后一次出现的数字?

时间:2009-10-17 14:29:38

标签: ruby regex string

使用Ruby ...给出以下字符串:

x = "blah_blah.do.dah[4543]junk_junk"

如何删除最后一个数字/数字后面的所有文字?

我认为最简单的方法可能是找到最后一次出现的索引,然后删除该索引之后的所有内容。但是,我似乎无法弄清楚如何获得该索引。我使用正则表达式的所有尝试都失败了。

7 个答案:

答案 0 :(得分:30)

如何做你需要的答案

还要找到最后一次出现的数字:

x = 'blah_blah.do.dah[4543]junk_junk'
x.rindex(/\d/)

答案 1 :(得分:3)

这可能是你正在寻找的正则表达式:

s/\D*$//

此正则表达式匹配字符串末尾的所有非数字,从最后一个数字或字符串的开头开始(如果它根本不包含任何数字),并删除匹配的任何数字。更准确地说,\D*greedy匹配尽可能多的非数字(零或更多)。 $表示字符串的结尾。

在Ruby中,您可以使用字符串的gsub方法使用正则表达式进行搜索和替换:

x = 'blah_blah.do.dah[4543]junk_junk'
y = x.gsub(/\D*$/, '')

有关正则表达式和Ruby的更多信息,请参阅regular-expressions.info

答案 2 :(得分:2)

总而言之,这似乎是最干净的&做我需要的最简单的方法。谢谢大家指出我正确的方向!

index = file.rindex(/\d/)
if(index) then
    p file[0 , index+1]
end

答案 3 :(得分:1)

这个正则表达式应该有效:

(.*(?=\d)\d)[^\d]*$

你应该使用类似的东西:

result = your_text.gsub(/(.*(?=\d)\d)[^\d]*$/, '\\1')

说明:

  • (.*(?=\d)\d)是您要保存的组合
    • .* .是除换行符之外的所有内容,*表示0次或更多次
    • (?=\d)表示,直到您能够匹配 \d这是一个数字
    • \d表示也匹配该数字!
  • [^\d]+$是您不想保存的部分
      [^\d]*中的
    • 匹配任何与\d不匹配且*再次为0次或更多次的
    • $是该行的结尾

替代方案可能只是简单地用{/ 1>替换[^\d]+$

答案 4 :(得分:0)

我假设你想在数字

之后加上最后的']'

以下是我的回答:

Original_Text = "blah_blah.do.dah[4543]junk_junk"
Result___Text = Original_Text.gsub(Regexp.new("(.*\\[[0-9]+\\])[^0-9]*$"), '\1')
puts Result___Text

如果没有,试试这个:

Original_Text = "blah_blah.do.dah[4543]junk_junk"
Result___Text = Original_Text.gsub(Regexp.new("(.*[0-9]+)[^0-9]*$"), '\1')
puts Result___Text

答案 5 :(得分:0)

irb(main):068:0> "blah_blah.do.dah[4543]junk_junk".match(/(.+\d)/)[1]
=> "blah_blah.do.dah[4543"

答案 6 :(得分:0)

puts "blah_blah.do.dah[4543]junk_junk"[/.*\d+/]
#returns "blah_blah.do.dah[4543"

使用rindex:

x = "blah_blah.do.dah[4543]junk_junk"
x.rindex(/\d/)
puts "#{$`}#{$&}"
#also returns "blah_blah.do.dah[4543"