Форум сайта python.su
0
Всем привет!
Ребята, подскажите такую вещь, почему в нижеуказанном примере питон извлекает последнее совпадение?
>>> m = re.match("([abc])+", "abc") >>> m.groups() ('c',)
>>> p = re.compile(r'(?P<word>\b\w+\b)') >>> m = p.search( '(((( Lots of punctuation )))' ) >>> m.group('word') 'Lots'
Офлайн
253
потому что в одном примере плюсик внутри скобок а в другом снаружи
Офлайн
0
Не понял, 1 пример трактую как: найди с начала строки одну или более групп, состоящих из или a или b или с. Логичен был бы результат ('a',), ('b',), ('c',).
2 пример трактую так: найди одно или более отдельных слова в строке и помести их в именнованную группу word. Там три отдельных слова, почему именно первое?
Подскажите где неправильно рассуждаю?
Офлайн
4
Для отладки реджексов используйте онлайн-тестер https://regex101.com/ там есть отладка и подсветка. Или RegexBuddy http://www.regexbuddy.com/
Вот ваш реджекс с пояснялками как он ищет https://regex101.com/r/tH0hM3/1
Отредактировано Suguby27 (Апрель 16, 2015 20:23:18)
Офлайн
0
Первый сервис я использовал, там дововльно топорная расшифровка. Интересует сама “магия”, почему движок отрабатывает именно так? Вторым инструментом не пользовался, надо затестить, спасибо, когда на win пересяду)))
Офлайн
4
там можно “поиграть” с плюсиками и прочим, что бы понять как оно матчит.
РеджексБадди похож, там еще режим отладки есть (давно правда не пользовал, может что изменилось)
Офлайн
4
а конкретно по вашему вопоосу:
?, +?, ??
The '*', '+', and '?' qualifiers are all greedy; they match as much text as possible. Sometimes this behaviour isn’t desired;
if the RE <.*> is matched against '<H1>title</H1>', it will match the entire string, and not just '<H1>'.
Adding '?' after the qualifier makes it perform the match in non-greedy or minimal fashion;
as few characters as possible will be matched. Using .*? in the previous expression will match only '<H1>'.
Отредактировано Suguby27 (Апрель 16, 2015 20:35:16)
Офлайн
0
Жадность до добра не доводит))) Так объясните в каком случае жадничает метасимвол + и как, на вышеуказанных примерах?
Офлайн
0
С первым случаем разобрался: повторяющийся захват группы цепляет только последнюю итерацию!
Офлайн
0
Со вторым я тоже разобрался, doza_and, теперь я понял что вы хотели сказать.
Офлайн