2013-05-29 6 views
0

Является ли смысл этого регулярного выражения: (\d+).*? - группировать набор чисел, а затем брать все, что приходит после (только одно его появление максимум, за исключением новой строки)?Значение regex Python

Есть ли разница в: (\d+) and [\d]+?

+0

первая группа, вторая - нет. – njzk2

ответ

2

Возьмите столько цифр, сколько возможно (по крайней мере 1), затем принимают наименьшее количество символов, насколько это возможно (за исключением символа новой строки). Нежелательный классификатор (?) действительно не помогает, если у вас нет остальной части вашего шаблона, следуя за ним, иначе он будет как можно меньше соответствовать, в этом случае всегда 0.

>>> import re 
>>> re.match(r'(\d+).*?', '123').group() 
'123' 
>>> re.match(r'(\d+).*?', '123abc').group() 
'123' 

Разница между (\d+) и [\d]+ является тот факт, что бывшие группы и последний не делает. ([\d]+) будет, однако, эквивалентным.

>>> re.match(r'(\d+)', '123abc').groups() 
('123',) 
>>> re.match(r'[\d]+', '123abc').groups() 
() 
+0

это выражение: '(\ d +). *? (\ S *)', это соответствует по крайней мере одному событию любого небелого символа (в группе), поэтому, если у меня есть «5000 шаров», '5000 'будет в group1 и' [whitespace] ball' в группе (2)? –

+0

@JamesHallen попробуйте это для себя – jamylak

+0

@JamesHallen Почему бы вам не попробовать? Он дает '('5000', '')'. '. *?' соответствует пустой строке, потому что не является жадным, а '\ S *' соответствует пустой строке, потому что следующий символ - это пробел. –

0
(\d)+ One or more occurance of digits, 
.* followed by any characters, 
? lazy operator i.e. return the minimum match. 
+0

Может кто-нибудь, пожалуйста, дешифровать этот шаблон? \ d + (?: \. \ d *)? – Tengis

0

Группа 1 будет по меньшей мере одним номером, а group0 будет содержать группу1 и, возможно, другие символы, но необязательно.

отредактировал для ответа на отредактированный вопрос: AFAIK не должно быть разницы в сопоставлении между этими 2, кроме группировки.