У меня есть строка Unnecessary:12357927251data
и я должен выбрать все данные после двоеточия и чисел. Я сделаю это использование Regexp.
string.scan(/:\d+.+$/)
Это даст мне :12357927251data
, но я могу выбрать только необходимую информацию .+
(data
)?
Все, что указано в скобках в регулярном выражении, будет захвачено как группа, к которой вы можете получить доступ в $ 1
, $ 2
и т. Д. Или с помощью []
на объекте соответствия:
string.match(/:\d+(.+)$/)[1]
Если вы используете сканирование с захватывающими группами, вы получите массив массивов групп:
"Unnecessary:123data\nUnnecessary:5791next".scan(/:\d+(.+)$/)
=> [["data"], ["next"]]
Используйте круглые скобки в регулярном выражении, и результат будет разбит на массив. Например:
x='Unnecessary:12357927251data'
x.scan(/(:\d+)(.+)$/)
=> [[":12357927251", "data"]]
x.scan(/:\d+(.+$)/).flatten
=> ["data"]
Попробуйте следующее: / ( ? <= \:) \ d +. + $ /
Он изменяет двоеточие на положительный просмотр назад, так что он не появляется в выводе. Обратите внимание, что двоеточие само по себе является метасимволом, поэтому его следует экранировать с помощью обратной косой черты.
Предполагая, что вы пытаетесь получить строку 'data' из своей строки, вы можете использовать:
string.match(/.*:\d*(.*)/)[1]
String # match возвращает объект MatchData. Затем вы можете проиндексировать этот объект MatchData, чтобы найти нужную часть строки.
(Первый элемент MatchData - это исходная строка, второй элемент - это часть строки, заключенная в круглые скобки)
Использование IRB
irb(main):004:0> "Unnecessary:12357927251data".scan(/:\d+(.+)$/)
=> [["data"]]