Ответ 1
Есть ответы, как сделать то, что вам нужно
Также, чтобы найти последнее появление числа:
x = 'blah_blah.do.dah[4543]junk_junk'
x.rindex(/\d/)
Использование Ruby... с учетом следующей строки:
x = "blah_blah.do.dah[4543]junk_junk"
Как удалить весь текст после последнего номера/цифры?
Я думал, что самый простой способ сделать это - найти индекс последнего вхождения, а затем удалить все после этого индекса. Однако я не могу понять, как получить этот индекс. Все мои попытки использования регулярных выражений потерпели неудачу.
Есть ответы, как сделать то, что вам нужно
Также, чтобы найти последнее появление числа:
x = 'blah_blah.do.dah[4543]junk_junk'
x.rindex(/\d/)
Это может быть регулярное выражение, которое вы ищете:
s/\D*$//
Это регулярное выражение соответствует всем не-цифрам в конце строки, начиная с последней цифры или начала строки (если она вообще не содержит цифр) и удаляет все, что соответствует. Точнее, \D*
является greedy для максимально возможного количества цифр (ноль или более). $
представляет конец строки.
В Ruby вы можете использовать метод gsub строки для поиска и замены с использованием регулярного выражения:
x = 'blah_blah.do.dah[4543]junk_junk'
y = x.gsub(/\D*$/, '')
Подробнее о регулярных выражениях и Ruby см. regular-expressions.info.
Это регулярное выражение должно работать:
(.*(?=\d)\d)[^\d]*$
Вы должны использовать что-то вроде:
result = your_text.gsub(/(.*(?=\d)\d)[^\d]*$/, '\\1')
Объяснение:
(.*(?=\d)\d)
- это группа вещей, которые вы хотите сохранить
.*
.
- это все, кроме разрыва строки, *
означает 0 или более раз(?=\d)
означает, что вы не сможете сопоставить символ \d
, который является цифрой\d
означает также эту цифру![^\d]+$
- это часть, которую вы не хотите сохранять
[^\d]*
соответствует любому, что не соответствует \d
, а *
снова 0 или более раз$
- это конец строкиАльтернативой может быть просто замена [^\d]+$
на ничего
В целом это казалось самым чистым и самым простым способом сделать то, что мне было нужно. Спасибо всем, что указали мне в правильном направлении!
index = file.rindex(/\d/)
if(index) then
p file[0 , index+1]
end
Я предполагаю, что вы хотите включить последний ']' после номера
Вот мой ответ:
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
irb(main):068:0> "blah_blah.do.dah[4543]junk_junk".match(/(.+\d)/)[1]
=> "blah_blah.do.dah[4543"
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"