2013-10-15 2 views
0

Предположим, у нас есть строка «рис с молоком», а другая - «белый рис». Я хочу использовать регулярное выражение, чтобы взять вторую строку или любую строку, в которой есть «рис», но нет «риса с». Говоря в наборах, которые бы множество всех строк, которые содержат «рис», но не «рис с»Дополнение регулярного выражения в python

Я пытался с расширением функциональности ^ на слова, а не только персонажей, играя с | и но я не могу найти решение.

+0

Чтобы уточнить: вам нужно регулярное выражение, совместимое с Python, которое соответствует строке, в которой «рис» не сопровождается «пробелом» после чего следует'. Правильно ли я понимаю? – Floris

+0

Правильно, я хочу, чтобы строки с «рисом» не сопровождались «пробелом», а затем « –

ответ

3

Вы должны быть в состоянии сделать это, используя "негативный предпросмотр":

import re 
m1 = re.search('rice(?! with)', 'rice with beans') 
m2 = re.search('rice(?! with)', 'white rice is delicious') 
if m1: 
    print 'm1 matches!' 
    print m1.group(0) 

if m2: 
    print 'm2 matches!' 
    print m2.group(0) 

Объяснение: (? - это начало «взгляда». Это способ рассказать regex «в этот момент должно быть что-то здесь, что соответствует ...» это выражение ». В этом случае мы немедленно следуем за ним с !, то есть (?!, что означает« негативный взгляд »-« а не, за которым следует «это выражение». В этом конкретном случае я использовал with как выражение - space, за которым следует with. Я мог бы выбрать \s для «любых пробелов» - но я полагал, что вы использовали это только как например, и вы, вероятно, могли бы найти регулярное выражение для «вещи, которая не должна следовать тому, что я хочу».

0

Я думаю, что вы хотели бы использовать отрицательный предпросмотр для этого,

r'.*rice(?! with).*' 

tested here

+0

» Обратите внимание, что обозначение '/ regex /' принадлежит perl. В python '/' будет заменен на '' '. – SethMMorton

+0

вам не нужен() вокруг риса? –

Смежные вопросы