Захватите первое десятичное число, которое> = 10 в Regex Ruby - PullRequest
0 голосов
/ 07 ноября 2019

Уже удалось записать первое десятичное число из заданной строки через

^\D*(\d+(?:\.\d+)?)

См .: https://rubular.com/r/5WJw7OkQ36iaQI

^ Из примера мне нужнозахват 50, а не 2.

Мне нужно просто захватить любое десятичное число, которое не меньше 10 - поэтому, чтобы избежать захвата значений, не являющихся ценами.

Я просто хочу захватить цены, заданныеклиенты, а не взятые часы и некоторые другие случайные вещи, которые они дали.

Есть ли способ для этого? Спасибо.

Ответы [ 2 ]

0 голосов
/ 07 ноября 2019

Вы уже получили хороший ответ о других подходах, но чтобы ответить на ваш вопрос напрямую:

Мне нужно просто захватить любое десятичное число, которое не меньше 10

/[1-9][0-9]+/ захватит первое число, большее или равное 10. В вашем примере возвращается 50 вместо 2.

0 голосов
/ 07 ноября 2019

Мне нравится делать что-то вроде

/^(?<hours>\d+).+\$(?<price>\d+)/

Мне нравится маркировать группы, потому что это помогает мне понимать / поддерживать регулярные выражения в будущем, но, очевидно, вы можете сделать

^.+\$(?<price>\d+)

и также будет работать

Пример того, как его использовать ...

2.6.4 :041 > m="2 hrs for $50".match(/^(?<hours>\d+).+\$(?<price>\d+)/)
 => #<MatchData "2 hrs for $50" hours:"2" price:"50">
2.6.4 :042 > m["price"]
 => "50"
2.6.4 :043 > m["hours"]
 => "2"
2.6.4 :044 > m="2 hrs for $50".match(/^.+\$(?<price>\d+)/)
 => #<MatchData "2 hrs for $50" price:"50">
2.6.4 :045 > m["price"]
 => "50"

Поскольку у вас есть символ $, вам не нужно проверять, меньше ли 10, чтобы узнать, что это цена.

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