Как получить конкретную часть сопоставления строк regexp в Ruby?

У меня есть строка Unnecessary:12357927251data и я должен выбрать все данные после двоеточия и чисел. Я сделаю это использование Regexp.

string.scan(/:\d+.+$/)

Это даст мне :12357927251data, но я могу выбрать только необходимую информацию .+ (data)?

11
задан Simon Perepelitsa 22 June 2010 в 15:49
поделиться

5 ответов

Все, что указано в скобках в регулярном выражении, будет захвачено как группа, к которой вы можете получить доступ в $ 1 , $ 2 и т. Д. Или с помощью [] на объекте соответствия:

string.match(/:\d+(.+)$/)[1]

Если вы используете сканирование с захватывающими группами, вы получите массив массивов групп:

"Unnecessary:123data\nUnnecessary:5791next".scan(/:\d+(.+)$/)
=> [["data"], ["next"]]
20
ответ дан 3 December 2019 в 04:12
поделиться

Используйте круглые скобки в регулярном выражении, и результат будет разбит на массив. Например:

x='Unnecessary:12357927251data'
x.scan(/(:\d+)(.+)$/)
=> [[":12357927251", "data"]]
x.scan(/:\d+(.+$)/).flatten
=> ["data"]
3
ответ дан 3 December 2019 в 04:12
поделиться

Попробуйте следующее: / ( ? <= \:) \ d +. + $ /

Он изменяет двоеточие на положительный просмотр назад, так что он не появляется в выводе. Обратите внимание, что двоеточие само по себе является метасимволом, поэтому его следует экранировать с помощью обратной косой черты.

1
ответ дан 3 December 2019 в 04:12
поделиться

Предполагая, что вы пытаетесь получить строку 'data' из своей строки, вы можете использовать:

string.match(/.*:\d*(.*)/)[1]

String # match возвращает объект MatchData. Затем вы можете проиндексировать этот объект MatchData, чтобы найти нужную часть строки.

(Первый элемент MatchData - это исходная строка, второй элемент - это часть строки, заключенная в круглые скобки)

1
ответ дан 3 December 2019 в 04:12
поделиться

Использование IRB

irb(main):004:0> "Unnecessary:12357927251data".scan(/:\d+(.+)$/)
=> [["data"]]
0
ответ дан 3 December 2019 в 04:12
поделиться
Другие вопросы по тегам:

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