Модераторы: Daevaorn
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> regex, нежадные регэкспы 
:(
    Опции темы
Леопольд
Дата 17.1.2010, 11:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 943
Регистрация: 17.6.2009

Репутация: нет
Всего: 13



Никак не могу понять нежадные регэкспы. Чем принципиально отличается ? от ?? и т.д.

Код

#!/usr/bin/env python2
# -*- coding: utf-8 -*-

import re

match = re.search(r' 1?','string 111')
print(match.span())                     #(6, 8)
match = re.search(r' 1??','string 111') #чем отличается от r' '?
print(match.span())                     #(6, 7)
match = re.search(r' 1+','string 111')
print(match.span())                     #(6, 10)
match = re.search(r' 1+?','string 111') #чем отличается от r' 1'?
print(match.span())                     #(6, 8)
match = re.search(r' 1*','string 111')
print(match.span())                     #(6, 10)
match = re.search(r' 1*?','string 111') #чем отличается от r' ' или от r' 1?'
print(match.span())                     #(6, 7)



--------------------
вопросов больше чем ответов
PM MAIL   Вверх
unicross
Дата 17.1.2010, 20:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 422
Регистрация: 15.6.2008

Репутация: 1
Всего: 53



Все квантификаторы по умолчанию являются "жадными". При поиске соответствия ищется самая длинная подстрока, соответствующая шаблону, и не учитываются более короткие соответствия. Например, получим содержимое всех тегов <b>:
Код

>>> import re
>>> s = "<b>Text1</b>Text2<b>Text3</b>"
>>> p = re.compile(r"<b>(.*)</b>", re.S)
>>> p.findall(s)
['Text1</b>Text2<b>Text3']
>>> p = re.compile(r"<b>(.*?)</b>", re.S)
>>> p.findall(s)
['Text1', 'Text3']

В первом случае квантификатор * является "жадным", поэтому вместо желаемого результата мы получили полностью строку. Во втором случае после квантификатора * указан символ ?, отменяющий жадность. В этом случае мы получили только текст между тегами, а не всю строку.
PM MAIL WWW   Вверх
Леопольд
Дата 17.1.2010, 22:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 943
Регистрация: 17.6.2009

Репутация: нет
Всего: 13



Спасибо! Саммерфилд недостаточно детально объяснил...


--------------------
вопросов больше чем ответов
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Python: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0390 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.