питон и регулярное выражение

1

#!/usr/bin/python
import re

str = raw_input("String containing email...\t")
match = re.search(r'[\w.-]+@[\w.-]+', str)
 if match:
  print match.group()

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

  • 0
    Я не знаю python, но в perl модификатор для получения всех совпадений - это g, так что, возможно, сработает r '[\ w .-] + @ [\ w .-] +' g.
  • 0
    Я уверен, что вы уже знаете об этом, но на всякий случай: это регулярное выражение пропускает некоторые действительные адреса электронной почты и найдет некоторые недействительные адреса.
Показать ещё 4 комментария
Теги:

4 ответа

5
Лучший ответ

Похоже, вы хотите 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.

  • 1
    +1 за определение имени переменной str
1

Я предполагаю, что re.findall - это то, что вы ищете.

0
  • Вы не используете raw_input так, как вы использовали. Просто используйте raw_input, чтобы получить вход с консоли.
  • Не переопределяйте встроенные функции, такие как 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
  • 0
    это круто - спасибо!
0

Попробуйте найти() или findall()

findall() соответствует всем вхождениям образец, а не только первый, как поиск(). Например, если писатель и хотел найти все наречия в некотором тексте, он или она может использовать findall()

http://docs.python.org/library/re.html#finding-all-adverbs

Ещё вопросы

Сообщество Overcoder
Наверх
Меню