使用Ruby ...给出以下字符串:
x = "blah_blah.do.dah[4543]junk_junk"
如何删除最后一个数字/数字后面的所有文字?
我认为最简单的方法可能是找到最后一次出现的索引,然后删除该索引之后的所有内容。但是,我似乎无法弄清楚如何获得该索引。我使用正则表达式的所有尝试都失败了。
答案 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"