Discuss / Python / 正则表达式

正则表达式

Topic source

七月上行

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

要匹配变长的字符,在正则表达式中,用*表示任意个字符(包括0个),用+表示至少一个字符,用?表示0个或1个字符,用{n}表示n个字符,用{n,m}表示n-m个字符: 由于'-'是特殊字符,在正则表达式中,要用'\'转义 , ; 这些都要转义 因此我们强烈建议使用Python的r前缀,就不用考虑转义的问题了: match()方法判断是否匹配,如果匹配成功,返回一个Match对象,否则返回None。常见的判断方法就是: 如果正则表达式中定义了组,就可以在Match对象上用group()方法提取出子串来。

注意到group(0)永远是原始字符串,group(1)、group(2)……表示第1、2、……个子串。 必须让\d+采用非贪婪匹配(也就是尽可能少匹配),才能把后面的0匹配出来,加个?就可以让\d+采用非贪婪匹配: 如果一个正则表达式要重复使用几千次,出于效率的考虑,我们可以预编译该正则表达式,接下来重复使用时就不需要编译这个步骤了,直接匹配:

def is_valid_email(addr): if re.match(r'[a-zA-Z.]+\@\w+.\w+',addr): return True else: return False

def name_of_email(addr): m = re.match(r'<*([a-z\sA-Z]+)>*\s(\w\)(\@\w+.\w+)',addr) print(m)

print(m.group(1))
return m.group(1)

七月上行

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

def name_of_email(addr): m = re.match(r'<*([a-z\sA-Z]+)>*\s*(\w*)(\@\w+.\w+)',addr) print(m)

print(m.group(1))
return m.group(1)

  • 1

Reply