Помогите с оператором Regex в Ruby - PullRequest
0 голосов
/ 12 мая 2010

У меня есть строка с именем «raw». Я пытаюсь разобрать его в ruby ​​следующим образом:

raw = "HbA1C ranging 8.0—10.0%"
raw.scan /\d*\.?\d+[ ]*(-+|\342\200\224)[ ]*\d*\.?\d+/

Выходное значение выше []. Я думаю, что это должно быть: ["8.0—10.0"].

Кто-нибудь знает, что не так с приведенным выше утверждением регулярного выражения?

Примечание: \342\200\224 равно (em-dash, U + 2014).

Часть, которая не работает: (-+|\342\200\224)

Я думаю, что это должно быть эквивалентно поговорке, соответствует 1 или более - ИЛИ соответствует строке \342\200\224.

Любая помощь будет принята с благодарностью!

Ответы [ 2 ]

1 голос
/ 12 мая 2010

Исходное регулярное выражение работает для меня (ruby 1.8.7), justs требует, чтобы захват был без захвата, и сканирование выдаст все совпадение. Или переключитесь на String#[] или String#match вместо String#scan и не редактируйте регулярное выражение.

raw = "HbA1C ranging 8.0—10.0%"
raw.scan /\d*\.?\d+[ ]*(?:-+|\342\200\224)[ ]*\d*\.?\d+/
# => ["8.0—10.0"]

Для тестирования / построения регулярных выражений в Ruby есть фантастический инструмент с http://rubular.com, который делает его намного проще. http://rubular.com/r/b1318BBimb - это отредактированное регулярное выражение с несколькими контрольными примерами, чтобы убедиться, что оно работает против них.

0 голосов
/ 12 мая 2010
raw = "HbA1C ranging 8.0—10.0%"
raw.scan(/\d+\.\d+.+\d+\.\d+/)
#=> ["8.0\342\200\22410.0"]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...