2013-10-14 7 views
0

У меня есть очень простой вопрос о регулярных выражениях:регулярное выражение захвата группы

Исходная строка: Имя: Bob Age:20

Узор 1: [\d]+

ТЕСТ2: ([\d])+

Почему это этот шаблон 1 соответствует: "20", а шаблон 2 соответствует только "0"?

Я знаю, что квантификатор + жадный, поэтому он соответствует одному или нескольким, но почему это так, когда я окружаю класс символов скобками, он соответствует только последнему символу?

+0

Какой двигатель регулярного выражения вы используете? –

+0

Получите 'group 0' во втором шаблоне, и вы получите' 20' за него. –

+0

с использованием встроенного модуля python «re» – user2739163

ответ

2

Он соответствует обоим. Глобальное совпадение - это число, но захваченное совпадение - это то, что находится между круглыми скобками, то есть [\d] (что равно \d).

Точное поведение будет зависеть от используемой функции/языка: вы можете получить «20» (глобальное совпадение) или «0» (захваченная группа). Если вы хотите записать все цифры, используйте (\d+) (+ внутри группы).

1

Образец 1: [\d]+ соответствует последовательности десятичных знаков (ноль или более), также может быть записан \d+ и будет соответствовать 20.

Шаблон2: ([\d])+ ссылок захватывает (ноль или более) из группы, содержащей only one десятичной, так что он будет соответствовать 2 и 0.

В дополнении:

Pattern3: ([\d]+)+ ссылки захватывают (ноль или более) из группы, содержащей one or more десятичных в greedy образом, он будет соответствовать 20.

Pattern4: ([\d]+?)+ ссылки захватывает (ноль или более) из группы, содержащей one or more десятичных в lazy образом, он будет соответствовать 2 и 0.

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