Символические имена групп (как в Python) в регулярном выражении Ruby - PullRequest
7 голосов
/ 19 января 2010

Наткнулся на эту удобную утилиту регулярных выражений в Python (я новичок в Python). например Используя регулярное выражение

(?P<id>[a-zA-Z_]\w*)

Я могу сослаться на сопоставленные данные как

m.group('id')

(Полная документация: ищите «символическое имя группы» здесь )

В Ruby мы можем получить доступ к сопоставленным ссылкам, используя $1, $2 или используя объект MatchData (m[1], m[2] и т. Д.). Есть ли что-то похожее на имена символических групп в Python в Ruby?

Ответы [ 2 ]

11 голосов
/ 19 января 2010

В более старых выпусках Ruby не было именованных групп (tx Alan для указания этого в комментарии!), Но, если вы используете Ruby 1.9 ...:

(?<name>subexp) также выражает именованную группу в выражениях Ruby; \k<name> - это способ обратной ссылки на именованную группу при замене, если это то, что вы ищете!

10 голосов
/ 19 января 2010

В Ruby 1.9 введены именованные захваты:

m = /(?<prefix>[A-Z]+)(?<hyphen>-?)(?<digits>\d+)/.match("THX1138.")
m.names # => ["prefix", "hyphen", "digits"]
m.captures # => ["THX", "", "1138"]
m[:prefix] # => "THX"

Вы можете использовать \k<prefix> и т. Д. Для обратных ссылок.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...