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