2013-09-13 2 views
0

Я пытаюсь найти и захватить все числа внутри (и) отдельно в моих данных, игнорируя остальную часть чисел.Соответствующие номера внутри вложенных нумерованных групп

Мои данные выглядит следующим образом

21 [42] (12) 19 25 [44] (25 26 27) 17 (14 3) 8 1 6 (19) 

Поэтому я хочу, чтобы найти спички для 12, 25, 26, 27, 14, 3 и 19

Я пытался делать \((\d+)\)*, но это только дает мне 12 , 25, 14, 19

Любая помощь приветствуется.

+0

Какой язык вы используете? – Toto

ответ

1

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

(\d+)(?=(?:.(?!\())*\)) 

Регулярное выражение:

(   group and capture to \1: 
\d+  digits (0-9) (1 or more times) 
)   end of \1 
(?=   look ahead to see if there is: 
(?:  group, but do not capture (0 or more times) 
    .  any character except \n 
    (?!  look ahead to see if there is not: 
    \(  '(' 
    )  end of look-ahead 
)*   end of grouping 
\)   ')' 
)   end of look-ahead 

См использование demo

0

этот образец \d+(?=(((?!\().)*)\)) пример here

изменен на следующий (\d+)(?=(?:(?!\().)*\))demo

+0

Это не соответствует тому, что вы ожидаете – hwnd

+0

@hwnd: помогите объяснить! мне кажется, что это хорошо из примера –

+0

Да, см. мой [demo] (http://www.regex101.com/r/gM8yB9) и посмотрите на свое [демо] (http://www.regex101.com/r/aW2iB9) – hwnd

0

Я не вижу там гнездования. Верстка подразумевает что-то вроде этого:

12 (34 (56) 78) 90 

Если у вас действительно есть данные, такие как, что - особенно если вы не знаете, как глубоко вложенности может пойти - я бы посоветовал вам не использовать регулярные выражения. Но ваша проблема выглядит очень просто; это должно быть все, что вам нужно:

\d+(?=[^()]*\)) 

Как и другие ответы, то предпросмотр утверждает, что есть закрывающая скобка впереди, без открытия скобок между здесь и там. Я также исключил закрывающие скобки, в основном ради эффективности. В противном случае это будет иметь тенденцию к увеличению по сравнению с ) сначала, только для того, чтобы вернуться к нему.

Смежные вопросы