Найти - Пользователи
Полная версия: Регулярные выражения
Начало » Python для новичков » Регулярные выражения
1 2
emil
Всем привет!
Ребята, подскажите такую вещь, почему в нижеуказанном примере питон извлекает последнее совпадение?
>>> 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'
doza_and
потому что в одном примере плюсик внутри скобок а в другом снаружи
emil
Не понял, 1 пример трактую как: найди с начала строки одну или более групп, состоящих из или a или b или с. Логичен был бы результат ('a',), ('b',), ('c',).
2 пример трактую так: найди одно или более отдельных слова в строке и помести их в именнованную группу word. Там три отдельных слова, почему именно первое?
Подскажите где неправильно рассуждаю?
Suguby27
Для отладки реджексов используйте онлайн-тестер https://regex101.com/ там есть отладка и подсветка. Или RegexBuddy http://www.regexbuddy.com/
Вот ваш реджекс с пояснялками как он ищет https://regex101.com/r/tH0hM3/1
emil
Первый сервис я использовал, там дововльно топорная расшифровка. Интересует сама “магия”, почему движок отрабатывает именно так? Вторым инструментом не пользовался, надо затестить, спасибо, когда на win пересяду)))
Suguby27
там можно “поиграть” с плюсиками и прочим, что бы понять как оно матчит.
РеджексБадди похож, там еще режим отладки есть (давно правда не пользовал, может что изменилось)
Suguby27
а конкретно по вашему вопоосу:
?, +?, ??
    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>'.
https://docs.python.org/2.7/library/re.html
emil
Жадность до добра не доводит))) Так объясните в каком случае жадничает метасимвол + и как, на вышеуказанных примерах?
emil
С первым случаем разобрался: повторяющийся захват группы цепляет только последнюю итерацию!
emil
Со вторым я тоже разобрался, doza_and, теперь я понял что вы хотели сказать.
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB