Как мне сопоставить более одной строки, разделенной одной точкой

#python #regex

#python #регулярное выражение

Вопрос:

У меня есть следующие условия:

  1. Имеет символ «@»;
  2. Перед символом «@» может быть одна или несколько строк, состоящих из букв, цифр и символов подчеркивания, разделенных одной точкой.
  3. После символа «@» может быть две или более строк, состоящих из букв, цифр и символов подчеркивания, разделенных одной точкой.
  4. В адресе электронной почты не должно быть никаких других символов, кроме букв, цифр, знаков подчеркивания, точек и символа «@».

Например, ваше регулярное выражение должно соответствовать адресам электронной почты, таким как: abc@umich.edu, 8ab.c_def9@example.regex.com

Но ваше регулярное выражение не должно совпадать: abc@ def., ab..abc@def.com, abc@def

Как мне получить более одной строки, разделенной одной точкой, не вводя . несколько раз (в зависимости от количества строк)?

Ответ №1:

Я не могу недооценивать качество инструкции по регулярному выражению Python. Чтение этого поможет вам стать лучшим программистом.

 import re
pattern = re.compile(r'$([a-zA-Z0-9_] .)*[a-zA-Z0-9_] @([a-zA-Z0-9_] .) [a-zA-Z0-9_] ^')
 

Примечания

  • * означает ноль или больше
  • означает один или несколько
  • ^ и $ являются началом и концом соответственно, чтобы исключить любой суффикс
  • . Должна быть экранирована обратная косая черта

Комментарии:

1. Спасибо! $ и ^ следует поменять местами, но в остальном все работает отлично.