Как найти последнее вхождение числа в строке с помощью Ruby?

Я знаю, что опаздываю на вечеринку здесь, однако, еще один отличный вариант - это Git Bash.

17
задан Cœur 25 April 2017 в 17:09
поделиться

7 ответов

Есть ответы, как сделать то, что вам нужно

Также найти последнее вхождение числа:

x = 'blah_blah.do.dah[4543]junk_junk'
x.rindex(/\d/)
30
ответ дан 30 November 2019 в 11:52
поделиться

В целом это казалось самым чистым и простым способом сделать то, что мне нужно. Спасибо всем за то, что указали мне правильное направление!

index = file.rindex(/\d/)
if(index) then
    p file[0 , index+1]
end
2
ответ дан 30 November 2019 в 11:52
поделиться
irb(main):068:0> "blah_blah.do.dah[4543]junk_junk".match(/(.+\d)/)[1]
=> "blah_blah.do.dah[4543"
0
ответ дан 30 November 2019 в 11:52
поделиться
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"
0
ответ дан 30 November 2019 в 11:52
поделиться

Это регулярное выражение должно работать:

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

Вы должны использовать что-то вроде:

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

Объяснение:

  • (. * (? = \ D) \ d) - это группа вещи, которую вы хотите спасти
    • . * . все, кроме разрыва строки, * означает 0 или более раз
    • (? = \ d) означает , пока вы не сможете сопоставить a \ d , который является цифрой
    • \ d означает, что эта цифра также соответствует!
  • [^ \ d] + $ - это часть, которую вы не хотите сохранять
    • в [^ \ d] * соответствует всему, что не соответствует \ d , а * снова 0 или более раз
    • $ - конец строки

Альтернативой может быть простая замена [^ \ d] + $ ничем

1
ответ дан 30 November 2019 в 11:52
поделиться

Это может быть регулярное выражение, которое вы ищете:

s/\D*$//

Это регулярное выражение соответствует всем нецифровым цифрам в конце строки, начиная с последней цифры или с начала строки (если она вообще не содержит цифр), и удаляет все совпадающие. Точнее, \ D * - это жадное соответствие для максимально возможного количества нецифровых цифр (ноль или более). $ представляет конец строки.

В Ruby вы можете использовать метод gsub строки для поиска и замены с использованием регулярного выражения:

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

Для получения дополнительной информации о регулярные выражения и Ruby,

3
ответ дан 30 November 2019 в 11:52
поделиться

Я предполагаю, что вы хотите включить последний символ "]" после числа

Вот мой ответ:

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
0
ответ дан 30 November 2019 в 11:52
поделиться
Другие вопросы по тегам:

Похожие вопросы: