ruby regex .scan - PullRequest
       13

ruby regex .scan

5 голосов
/ 06 августа 2009

Я использую метод Ruby scan (), чтобы найти текст в определенном формате. Затем я вывожу его в строку, разделенную запятыми. Текст, который я пытаюсь найти, выглядел бы так:

AB_ABCD_123456

Вот то, что я придумал, чтобы найти вышеупомянутое. Работает нормально:

text.scan(/.._...._[0-9][0-9][0-9][0-9][0-9][0-9]/)
puts text.uniq.sort.join(', ')

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

AB_ABCD_123456
AB_ABCD_123456UK
AB_ABCD_123456DE

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

Ответы [ 4 ]

13 голосов
/ 06 августа 2009
/.._...._[0-9][0-9][0-9][0-9][0-9][0-9](?:[A-Z][A-Z])?/

Вы также можете использовать {} для сокращения регулярного выражения:

/.{2}_.{4}_[0-9]{6}(?:[A-Z]{2})?/

Объяснение: ? делает предыдущий шаблон необязательным. () группирует выражения вместе (поэтому ruby ​​знает, что ? относится к двум буквам). ?: после открытия ( делает группу не захватывающей (группы захвата изменили бы значения, полученные сканированием).

1 голос
/ 06 августа 2009

Попробуйте это:

text.scan(/\w{2}_\w{4}_\d{6}\w{0,2}/) 
#matches AB_ABCD_123456UK or ab_abcd_123456uk and so on...

или

text.scan(/[A-Z]{2}_[A-Z]{4}_\d{6}[A-Z]{0,2}/) 
# tighter, matches only AB_ABCD_123456UK and similars...
# and not something like ab_aBCd_123456UK or ab_abcd_123456uk and similars...

обратитесь к этим URL:

Ruby gsub / regex модификаторы?

http://ruby -doc.org / документы / рубин-док-расслоение / Руководство / человек-1,4 / syntax.html # регулярное выражение

, если вы хотите узнать больше о регулярных выражениях.

1 голос
/ 06 августа 2009

Почему бы просто не использовать сплит?

"AB_ABCD_123456".split(/_/).join(',')

Обрабатывает перечисленные вами дела без изменений.

1 голос
/ 06 августа 2009
 /.._...._\d{6}([A-Z]{2})?/
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...