2009-03-18 3 views
0

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

Например, если строка «возраст» и 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-х символов от «возраста».

ответ

5

насчет

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

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

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

?

+0

Совершенная. Спасибо. Я предпочитаю синтаксис \ d, но я принимаю его :) –

3

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

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

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

+0

Спасибо. В Java вы получаете java.util.regex.PatternSyntaxException: недопустимое повторение, а «{0,4}» следует использовать вместо «{, 4}» –

0
[Aa]ge[\D]{,N}(\d+) 

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

0

Расширение на другие ответы здесь, если вам это нужно, чтобы быть в пределах 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]; 
Смежные вопросы