2016-07-18 3 views
-7

У меня есть строка в следующем формате:шаблон между двумя строками в Python

В продукт обратной связи с Винсом ([email protected]) ... В-продукт обратной связи от Кори Циммермана Андерсон (КТС @ ДДД. com) ... Обратная связь с продуктом от Андреа Ибарры ([email protected])

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

+3

Вы можете показать свои усилия, а также есть много вопросов по так, что картины показывают регулярные выражений для извлечения адресов электронной почты из строк – EdChum

+0

Так вы просто пытаетесь извлечь текст внутри скобок? –

ответ

1

Используйте следующий код:

import re 
r = re.findall(r"\(([^)]+)\)", s) 
print(r) 

где находится в ваших строках.

+0

Hi UpmostScarab: У меня есть множественное появление шаблона в моей строке. Ваш код возвращает только последнее вхождение. Как я могу изменить его, чтобы вернуть все вхождения? – Prasanna

+0

@ user560945 попробуйте отредактированную версию. – UpmostScarab

+0

По-прежнему только один после использования отредактированного кода ... – Prasanna

3

Поскольку текст у вас есть довольно много статический и имена, скорее всего, не содержат () вы можете использовать не регулярки подход:

s = "In-product feedback from Vince ([email protected])" 
s_clean = s.rsplit('(')[1].strip(')') 
print(s_clean) 
# '[email protected]' 

Или использовать регулярные выражения в любом случае:

import re 

s = "In-product feedback from Vince ([email protected])" 
s_clean = re.findall(r'\((.*?)\)', s)[0] 
print(s_clean) 
# '[email protected]' 

И с несколькими случаями вы получите список всех сообщений:

s = "In-product feedback from Vince ([email protected])...In-product feedback from Corey Zimmerman Anderson ([email protected])...In-product feedback from Andrea Ibarra ([email protected])" 
s_clean = re.findall(r'\((.*?)\)', s) 
print(s_clean) 
# ['[email protected]', '[email protected]', '[email protected]'] 
+0

Означает ли ваш код несколько вхождений? – UpmostScarab

+0

Да, если вы удалите '[0]', вы получите список всех вхождений с 's_clean = re.findall (r '\ ((. *?) \)', S)'. Просмотреть мое обновление –

0

Попробуйте

import re 
str = 'In-product feedback from Vince ([email protected])' 
regex = '(In-product feedback from) ([a-zA-Z ]+) \(([a-zA-Z0-9_.+-][email protected][a-zA-Z0-9-]+\.[a-zA-Z0-9-.]+)\)' 
phrase= re.match(regex, str) 
print phrase.group(1) # In-product feedback from 
print phrase.group(2) # Vince 
print phrase.group(3) # [email protected] 
Смежные вопросы