2015-02-08 2 views
1

У меня есть семь фруктов, которые вам разрешено использовать в предложении, и вам разрешено писать более одного и столько раз, сколько вы хотите. Это Watermelon, Pear, Peach, Orange, Apple, Banana и Grapes. Я хочу отложить предложение назад, а также заменить первый плод, который выходит, независимо от того, показано ли это слово несколько раз, и есть несколько плодов, которые указаны в разрешенном списке с Брюссельской капустой, как показано ниже.Python: замените первое слово, которое показывает другое слово

In: Apple apple apple, что арбуз должен сделать, чтобы получить яблоко?

Out: Брюссельская капуста яблочного яблока, что арбуз должен сделать, чтобы получить яблоко ?

В: яблоко любит апельсин

Out: The брюссельская капуста любит апельсин

Сейчас я баловаться с этим ниже код, но это работает только для одного плода, и мне нужно проверьте все семь одновременно, чтобы увидеть, какой из них первым, и заменить его.

print sentence.replace("apple", "brussel sprouts", 1) 

Как это сделать?

+2

Каков ваш ожидаемый результат? –

+0

Показывает, что я должен ожидать. –

ответ

3

Через re.sub. (.*?) при первом помогает захватить всех персонажей непосредственно перед первым фруктом. И узор (?:Watermelon|Pear|Peach|Orange|Apple|Banana|Grapes) соответствует первому названию фрукта. Таким образом, заменяя согласованные символы символами внутри группы, индекс 1 даст вам желаемый результат.

>>> import re 
>>> s = "Apple apple apple what is a watermelon have to do to get an apple?" 
>>> re.sub(r'(?i)^(.*?)\b(?:Watermelon|Pear|Peach|Orange|Apple|Banana|Grapes)\b', r'\1brussel sprouts', s) 
'brussel sprouts apple apple what is a watermelon have to do to get an apple?' 
>>> re.sub(r'(?i)^(.*?)\b(?:Watermelon|Pear|Peach|Orange|Apple|Banana|Grapes)\b', r'\1brussel sprouts', 'The apple likes orange') 
'The brussel sprouts likes orange' 

(?i) называется регистронезависимым модификатор, который заставляет регулярное выражение двигателя, чтобы сделать матч регистронезависимым.

+0

Спасибо, друг! :) –

1

Здесь есть две отдельные проблемы; Первый - это find 'положение плода, если оно существует в строке. Второй - replace 'тот, кто был найден первым. Поскольку я не хочу решать вашу домашнюю проблему для вас, я просто покажу вам небольшой пример, который поможет вам начать работу в правильном направлении.

sentence = "Apple apple apple what is a watermelon have to do to get an apple?".lower() # We lowercase it so that "Apple" == "apple", etc. 
index = sentence.find("apple") 
print(index) 
>>> 0 
index = sentence.find("banana") # This is what happens when searching for fruit not in sentence 
print(index) 
>>> -1 

Теперь, когда вы знаете о find, вы должны быть в состоянии легко понять, как объединить серию из find и replace операций получить желаемый результат.

+0

Спасибо, это помогло! –