Python 我从给定字符串中查找电子邮件,并返回字符串中存在的电子邮件

Python 我从给定字符串中查找电子邮件,并返回字符串中存在的电子邮件,python,regex,regex-lookarounds,regex-group,Python,Regex,Regex Lookarounds,Regex Group,我的要求是- 名称:名称是小于或等于的字母数字字符串 等于12个字符。允许使用其他字符 破折号(-)、句点(.)和下划线(389;)。但是电子邮件 不能以这些附加字符开头或结尾。 名称的长度也必须至少为1个字符。 示例名称值: a, ab, a_b, A__B..C--D, 1nt3r3st.1ng 域:域严格为数字,且数字必须为 可被5整除的。域的长度不受限制。 域值示例: 984125, 0 结尾:电子邮件必须以(.com)或(.ca)结尾(区分大小写) Exmaple: find_spec

我的要求是-

名称:名称是小于或等于的字母数字字符串 等于12个字符。允许使用其他字符 破折号(-)、句点(.)和下划线(389;)。但是电子邮件 不能以这些附加字符开头或结尾。 名称的长度也必须至少为1个字符。 示例名称值: a, ab, a_b, A__B..C--D, 1nt3r3st.1ng

:域严格为数字,且数字必须为 可被5整除的。域的长度不受限制。 域值示例: 984125, 0

结尾:电子邮件必须以(.com)或(.ca)结尾(区分大小写)

Exmaple:

find_special_email('12345a_test_email@165265365.com!')

'a_test_email@165265365.com'
import re

def find_special_email(str):
   match = re.search(r'[a-zA-Z0-9_\.-]{1,12}@[0-9]+\.(com|ca)(\.[a-z]{2,3})?', str)
   return match.group(0)


print(find_special_email('12345a_test_email@165265365.com!'))
print(find_special_email('A__B..C--D@165265365.com!'))
我尝试过的:

find_special_email('12345a_test_email@165265365.com!')

'a_test_email@165265365.com'
import re

def find_special_email(str):
   match = re.search(r'[a-zA-Z0-9_\.-]{1,12}@[0-9]+\.(com|ca)(\.[a-z]{2,3})?', str)
   return match.group(0)


print(find_special_email('12345a_test_email@165265365.com!'))
print(find_special_email('A__B..C--D@165265365.com!'))
我的问题:

find_special_email('12345a_test_email@165265365.com!')

'a_test_email@165265365.com'
import re

def find_special_email(str):
   match = re.search(r'[a-zA-Z0-9_\.-]{1,12}@[0-9]+\.(com|ca)(\.[a-z]{2,3})?', str)
   return match.group(0)


print(find_special_email('12345a_test_email@165265365.com!'))
print(find_special_email('A__B..C--D@165265365.com!'))
  • 电子邮件不能以这些附加字符开头或结尾,例如破折号(-)、句点(.)和下划线(41;
  • 我不知道如何匹配可被5整除的“域”
  • 这个正则表达式-可以帮助您

    正则表达式:
    [a-zA-Z0-9](?:[a-zA-Z0-9.-]{0,10}[a-zA-Z0-9])?@[0-9]*[05]+.(?:com | ca)(?:\[a-z]{2,3})

    所做的更改:

    find_special_email('12345a_test_email@165265365.com!')
    
    'a_test_email@165265365.com'
    
    import re
    
    def find_special_email(str):
       match = re.search(r'[a-zA-Z0-9_\.-]{1,12}@[0-9]+\.(com|ca)(\.[a-z]{2,3})?', str)
       return match.group(0)
    
    
    print(find_special_email('12345a_test_email@165265365.com!'))
    print(find_special_email('A__B..C--D@165265365.com!'))
    
  • 前缀为
    [a-zA-Z0-9]
    ,以便电子邮件以有效字符开头
  • >代码>([AZ-ZO-9O.-] {0,10}[AZ-Z0-9]) -在第一个字符之后,地址可以可选地包含中间有效字符的0到10倍,但应该以字母数字字符结尾。整个表达式是可选的,因此它可以匹配地址部分中的单个有效字符
  • [0-9]*[05]+
    -它确保域可以包含多个数字,但应该以0或5结尾

  • Regex不太适合数字,但这个特殊的数字要求可以用“以0或5结尾”来表达。根据定义,域名不区分大小写。你的“exmaple”很奇怪。为什么要提取部分地址?