Я пытаюсь использовать регулярное выражение для извлечения части адреса электронной почты между знаком "@" и знаком "." персонаж. Вот как я сейчас это делаю, но не могу получить правильные результаты.
company = re.findall('^From:.+@(.*).',line)
Дает мне:
['@iupui.edu']
Я хочу избавиться от .edu
4 ответа
Чтобы соответствовать литералу .
в вашем регулярном выражении, вам нужно использовать \.
, поэтому ваш код должен выглядеть следующим образом:
company = re.findall('^From:.+@(.*)\.',line)
# ^ this position was wrong
Смотрите его здесь.
Обратите внимание, что это всегда будет соответствовать последнему вхождению .
в вашей строке, потому что (.*)
является жадным. Если вы хотите соответствовать вхождению first , вам нужно исключить .
из вашей группы захвата:
company = re.findall('^From:.+@([^\.]*)\.',line)
Смотрите демонстрационную версию.
Вы можете попробовать это:
(?<=\@)(.*?)(?=\.)
Смотрите демонстрационную версию.
Вы можете просто разделить и найти:
s = " abc.def@ghi.mn I"
s = s.split("@", 1)[-1]
print(s[:s.find(".")])
Или просто разделить, если он не всегда соответствует вашей строке:
s = s.split("@", 1)[-1].split(".", 1)[0]
Если это так, то поиск будет самым быстрым:
i = s.find("@")
s = s[i+1:s.find(".", i)]
Простой пример:
>>> import re
>>> re.findall(".*(?<=\@)(.*?)(?=\.)", "From: atc@moo.com")
['moo']
>>> re.findall(".*(?<=\@)(.*?)(?=\.)", "From: atc@moo-hihihi.com")
['moo-hihihi']
Это соответствует имени хоста независимо от начала строки, то есть это жадный .
Похожие вопросы
Новые вопросы
python
Python - это многопарадигмальный, динамически типизированный, многоцелевой язык программирования. Он разработан для быстрого изучения, понимания и использования, а также для обеспечения чистого и единообразного синтаксиса. Обратите внимание, что Python 2 официально не поддерживается с 01.01.2020. Тем не менее, для вопросов о Python, связанных с версией, добавьте тег [python-2.7] или [python-3.x]. При использовании варианта Python (например, Jython, PyPy) или библиотеки (например, Pandas и NumPy) включите его в теги.