Discuss / Python / 交作业

交作业

Topic source

作业一:

import re
def is_valid_email(addr):
    re_mail = re.compile(r'([a-zA-Z0-9.]+)@([a-zA-z0-9]+)(\.com|\.org)')
    if re_mail.match(addr):
        return True

作业二:

import re
def name_of_email(addr):
    re_mail = re.compile(r'(<[a-zA-Z]+\s[a-zA-Z]+>\s)?([a-zA-Z0-9.]+)@([a-zA-z0-9]+)(\.com|\.org)')
    name = re_mail.match(addr).group(1)
    if name:
        name = re_mail.match(addr).group(1)[1:-2]    
    else:
        name = re_mail.match(addr).group(2)
    return name

到现在我还不知道^$有什么用,re.match()不是从第一个字符开始匹配吗?我试了加不加^$没有区别

闹鬼书店

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

^代表开头$代表结尾,如果不加,那么email出现在整个字符串中间的话依然可以被匹配

^与$都不加的话,跟只加了^是一个效果

^:限制了匹配的起始位置

&:限制了匹配的结束位置

纠正:

感觉应该这样:不管加不加^,起始位置必须匹配,然后看$,加了$的话,结束位置必须匹配,如果没有$,则待匹配的字符串的结束位置可以扩展。举例如下:

>>> import re

>>> re.match('kd', 'kddkf') #起始位置都是kd,由于没有加$,故待匹配字符串可以扩展,多加一部分内容,这里多了'dkf',甚至还可以继续扩展,故匹配成功,

<re.Match object; span=(0, 2), match='kd'>

>>> re.match('kd', 'ddkf') #起始位置不同

>>> re.match('^kd', 'kddkf') #加了^后的情形与不加^的情形是一样的

<re.Match object; span=(0, 2), match='kd'>

>>> re.match('^kd', 'ddkf')

>>> re.match('kd$', 'kddkf') #加了$后,结束位置必须匹配,在'kd'之后不能继续扩展

>>> re.match('kd$', 'kd') #加了$,不能扩展,此时相当于re.match('^kd$', 'kd'),匹配成功

<re.Match object; span=(0, 2), match='kd'>

>>>


  • 1

Reply