Discuss / Python / 我尽量给大家提供最简化版答案

我尽量给大家提供最简化版答案

Topic source

遥望君山

#1 Created at ... [Delete] [Delete and Lock User]
def is_valid_email(addr):
    return re.match(r'[\w\.]+@\w+\.com', addr)

def name_of_email(addr):
    return re.match(r'.*?([\w\s]+)', addr).group(1)

天小六

#2 Created at ... [Delete] [Delete and Lock User]

第二个没看明白能解析一下吗

遥望君山

#3 Created at ... [Delete] [Delete and Lock User]

这里用到了上面“贪婪匹配”一节的内容。'.*?'表示最短匹配任意长度字符串,长度可以为零。右边括号里的内容是匹配任意包含字母和空格的字符串,符合人名规范,用group方法提取并返回。

大佬的代码就是简洁,就是第二个看不明白

遥望君山

#5 Created at ... [Delete] [Delete and Lock User]

并没有用到超纲的知识哈,你跟着老师的教程多敲几遍代码就懂了。

大兄弟,请教一下,bill.gates@microsoft.com 怎么把 bill.gates提出来?

提取邮件中名字(含英文句点),我像下面这样弄,那个bill.gates提不出来,返回False。不晓得咋弄出这个带点名字?!

import re

#提取带名字的email地址中的名字:
def name_of_email(addr):
    addr = str(addr)
    m1 = re.match(r'.*?(\w+[\.|\s]?\w+)@.*?', addr)
    if m1:
        print(m1.group(1))
        return m1.group(1)
        
# 测试:
assert name_of_email('<Tom Paris> tom@voyager.org') == 'Tom Paris'
assert name_of_email('tom@voyager.org') == 'tom'
assert name_of_email('bill.gates@microsoft.com' == 'bill.gates')
print('ok')

运行结果:

Tom Paris
tom
False
ok
def name_of_email(addr):    return re.match(r'.*?([\w\.]+[\s\w]+|[\w\s]+)',addr).group(1)

我编了一个,可以把bill.gates给提取出来

print(name_of_email('bill.gates@microsoft.com'))

第二个有问题,虽然测试能够通过,但是并未验证全部邮箱格式:

def name_of_email(addr):
    print(re.match(r'.*?([\w\s]+)', addr).group(0))    # 这里可以看到验证的是邮箱的部分内容,<Tom Paris, tom
    return re.match(r'.*?([\w\s]+)', addr).group(1)

import re

re.match(r'.*?([\w\s\.]+)','bill.gates@microsoft.com').group(1)

多谢大佬呀。

这个可以把世界首富的名字匹配出来:)

有什么特征符号加进范围捕获里面就行


  • 1

Reply