【问题标题】:I am finding an email from from a given string and returning the email that exists in the string我从给定的字符串中找到一封电子邮件并返回字符串中存在的电子邮件
【发布时间】:2020-11-30 06:35:32
【问题描述】:

我的要求是-

name:名称是小于或的字母数字字符串 等于 12 个字符。允许的附加字符是 破折号 (-)、句点 (.) 和下划线 (_)。但是邮件 不能以这些附加字符开头或结尾。 该名称还必须至少有 1 个字符长。 示例名称值: 一个, ab, a_b, A B C D, 1nt3r3st.1ng

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

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

示例:

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!'))

我的问题:

  1. 电子邮件不能以这些附加字符开头或结尾,例如破折号 (-)、句点 (.) 和下划线 (_)
  2. 不知道如何匹配能被5整除的“域”

【问题讨论】:

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

标签: python regex regex-lookarounds regex-group


【解决方案1】:

这个正则表达式 - https://regex101.com/r/wSS0ES/4 可以提供帮助。

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

所做的更改:

  1. 前缀 [a-zA-Z0-9] 以便电子邮件以有效字符开头。
  2. (?:[a-zA-Z0-9_.-]{0,10}[a-zA-Z0-9])? - 在第一个字符之后,地址可以选择包含中间所有有效字符的 0 到 10 倍,但应以字母数字字符结尾。整个表达式是可选的,以便它可以匹配地址部分中的单个有效字符。
  3. [0-9]*[05]+ - 它确保域可以包含多个数字,但它应该以 0 或 5 结尾

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-04-18
    • 1970-01-01
    • 2023-03-31
    • 2021-05-31
    • 2013-03-20
    • 2017-12-11
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多