#!/usr/bin/python import re str = raw_input("String containing email...\t") match = re.search(r'[\w.-]+@[\w.-]+', str) if match: print match.group()
это не самый сложный код, и я ищу способ получить ВСЕ из совпадений, если это возможно.
Похоже, вы хотите re.findall()
:
findall(pattern, string, flags=0)
Return a list of all non-overlapping matches in the string.
If one or more groups are present in the pattern, return a
list of groups; this will be a list of tuples if the pattern
has more than one group.
Empty matches are included in the result.
Насколько актуально регулярное выражение для идентификации адресов электронной почты... См. этот вопрос.
Кроме того, будьте осторожны, используя str
как имя переменной. Это скроет str
.
Я предполагаю, что re.findall - это то, что вы ищете.
Не переопределяйте встроенные функции, такие как str. Используйте значащее имя и присвойте ему целое строковое значение.
Также неплохо было бы много раз скомпилировать ваш шаблон, если бы объект Regex соответствовал строке. (показано в коде)
Я только понял, что полное регулярное выражение для соответствия идентификатору электронной почты точно так же, как RFC822 может быть страничным, в противном случае этот фрагмент должен быть полезен.
import re
inputstr = "[email protected], [email protected], [email protected], etc etc\t"
mailsrch = re.compile(r'[\w\-][\w\-\.]+@[\w\-][\w\-\.]+[a-zA-Z]{1,4}')
matches = mailsrch.findall(inputstr)
print matches
Попробуйте найти() или findall()
findall() соответствует всем вхождениям образец, а не только первый, как поиск(). Например, если писатель и хотел найти все наречия в некотором тексте, он или она может использовать findall()