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: