Простой Python. современный стиль программирования - читать онлайн бесплатно полную версию книги . Страница 149

prev (?= next)

prev, если за ним следует next

prev (? ! next)

prev, если за ним не следует next

(?<=prev ) next

next, если перед ним находится prev

(?<! prev) next

next, если перед ним не находится prev

У вас могло зарябить в глазах при попытке прочесть эти примеры. Для начала

определим строку-источник:

>>> source = '''I wish I may, I wish I might

... Have a dish of fish tonight.'''

Найдем во всем тексте строку 'wish':

>>> re.findall('wish', source)

['wish', 'wish']

198

Глава 7. Работаем с данными профессионально

Далее найдем во всем тексте строки 'wish' или 'fish':

>>> re.findall('wish|fish', source)

['wish', 'wish', 'fish']

Найдем строку 'wish' в начале текста:

>>> re.findall('^wish', source)

[]

Найдем строку 'I wish' в начале текста:

>>> re.findall('^I wish', source)

['I wish']

Найдем строку 'fish' в конце текста:

>>> re.findall('fish$', source)

[]

Наконец, найдем строку 'fish tonight.$' в конце текста:

>>> re.findall('fish tonight.$', source)

['fish tonight.']

Символы ^ и $ называются якорями: с помощью якоря ^ выполняется поиск

в начале строки, а с помощью якоря $ — в конце. Сочетание .$ совпадает с любым

символом в конце строки, включая точку, поэтому выражение сработало. Для обес-

печения большей точности нужно создать управляющую последовательность,

чтобы найти именно точку:

>>> re.findall('fish tonight\.$', source)

['fish tonight.']

Начнем с поиска символов w или f, за которым следует буквосочетание ish:

>>> re.findall('[wf]ish', source)

['wish', 'wish', 'fish']

Найдем одно или несколько сочетаний символов w, s и h:

>>> re.findall('[wsh]+', source)

['w', 'sh', 'w', 'sh', 'h', 'sh', 'sh', 'h']

Найдем сочетание ght, за которым следует любой символ, кроме буквенного или

цифрового символа или знака подчеркивания:

>>> re.findall('ght\W', source)

['ght\n', 'ght.']

Найдем символ I, за которым следует сочетание wish: