Регулярное выражение: найти число рядом с данной строкой - PullRequest
0 голосов
/ 18 марта 2009

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

Например, если строка "age" и N = 4, нужно найти

"Age 5" => 5
"My age is 10 and I my name is John" => 10
"My age is almost 5 and I my name is Mary" => null

В последнем случае число отделяется более чем на 4 символа от «возраста».

Ответы [ 4 ]

5 голосов
/ 18 марта 2009

А как же

age[^0-9]{0,4}[0-9]+

, если вы хотите захватить найденное число:

age[^0-9]{0,4}([0-9]+)

3 голосов
/ 18 марта 2009

Что-то вроде следующего:

age[^\d]{,4}(\d+)

это означает «возраст, за которым следуют от 0 до 4 нецифров, за которыми следуют одна или несколько цифр ... захватить цифры»

0 голосов
/ 18 марта 2009

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

/((\d+)\D{,4})?age(\D{,4}(\d+))?/i

Тогда:

if(matches[2] != null)
{
  if(matches[4] != null)
    return max(matches[2], matches[4]);  //or however you want to resolve this..
  else
    return matches[2];
}
return matches[4];
0 голосов
/ 18 марта 2009
[Aa]ge[\D]{,N}(\d+)

, а затем получить содержимое первой группы ($ 1).

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