Как получить определенную часть соответствия строк регулярному выражению в 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"]]