рубин regex .scan

Два броска C-стиля в Вашем примере являются различными видами броска. В C++ Вы обычно писали бы им

unsigned int uf1 = static_cast<unsigned int>(fl);

и

unsigned char* up = reinterpret_cast<unsigned char*>(p);

, первое выполняет арифметический бросок, который усекает число с плавающей точкой, таким образом, существует потеря данных.

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

5
задан michaelmichael 5 August 2009 в 21:12
поделиться

4 ответа

/.._...._[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 знает, что ? применяется к двум буквам). ?: после открытия ( делает группу не захватывающей (захватываемые группы изменяют значения, полученные при сканировании).

13
ответ дан 18 December 2019 в 10:47
поделиться
 /.._...._\d{6}([A-Z]{2})?/
1
ответ дан 18 December 2019 в 10:47
поделиться

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

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

Обработка перечисленных вами случаев без изменений.

1
ответ дан 18 December 2019 в 10:47
поделиться

Попробуйте следующее:

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/docs/ruby -doc-bundle / Manual / man-1.4 / syntax.html # regexp

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

1
ответ дан 18 December 2019 в 10:47
поделиться
Другие вопросы по тегам:

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