Регулярное выражение для извлечения чисел из строки

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

Учитывая следующие строки...

  • "Апрель (123 виджета меньше 456 звездочек)"
  • "Май (789 виджетов меньше 012 звездочек)"

Мне нужно регулярное выражение, которое извлечет два числа из текста. Название месяца будет отличаться. Скобки, "виджеты меньше" и "звездочки" не будут меняться между строками, однако было бы очень полезно, если бы этот текст также мог быть изменен.

Спасибо заранее.

Ответ 1

если вы точно знаете, что будут только 2 места, где у вас есть список цифр в вашей строке, и это единственное, что вы собираетесь вытащить, тогда вы сможете просто использовать

\d+

Ответ 2

^\s*(\w+)\s*\(\s*(\d+)\D+(\d+)\D+\)\s*$

должен работать. После матча, backreference 1 будет содержать месяц, backreference 2 будет содержать первое число и backreference 3 второе число.

Объяснение:

^     # start of string
\s*   # optional whitespace
(\w+) # one or more alphanumeric characters, capture the match
\s*   # optional whitespace
\(    # a (
\s*   # optional whitespace
(\d+) # a number, capture the match
\D+   # one or more non-digits
(\d+) # a number, capture the match
\D+   # one or more non-digits
\)    # a )
\s*   # optional whitespace
$     # end of string

Ответ 3

вы можете использовать что-то вроде:

[^0-9]+([0-9]+)[^0-9]+([0-9]+).+

Затем получите первую и вторую группы захвата.