当前位置: 首页 > 科技观察

Python正则表达式百科

时间:2023-03-14 12:45:36 科技观察

1前言正则表达式是对字符串进行运算的逻辑公式,包括普通字符(例如a和z之间的字母)和特殊字符(称为“元字符”),就是使用一些特定的字符预先定义好这些特定的字符,组合成一个“规则字符串”,用来表达对字符串的过滤逻辑。正则表达式是一种文本模式,它描述了在搜索文本时要匹配的一个或多个字符串。以上均为官方说明。博主自己的理解是(仅供参考):通过预先指定一些特殊字符的匹配规则,然后利用这些字符进行组合来匹配各种复杂的字符串场景。比如现在的爬虫和数据分析、字符串校验等都需要使用正则表达式来处理数据。python的正则表达式就是re模块:re模块使得Python语言拥有了所有的正则表达式功能。re模块还提供了与这些方法完全相同的功能,将模式字符串作为第一个参数。2基本语法2.1匹配函数只匹配字符串开头的模式。以下是该函数的语法:re.match(pattern,string,flags=0)以下是参数说明:pattern-这是要匹配的正则模式表达式。string-这是将在字符串开头搜索匹配模式的字符串。标志-可以使用按位或(|)指定不同的标志。这些是修饰符,如下表所列。re.match函数在成功时返回匹配对象,在失败时返回None。使用match(num)或groups()函数匹配对象以获得匹配表达式。例子#从初始位置不匹配,将返回Noneimportreline='icaspeakgoodenglish'matchObj=re.match(r'\s(\w*)\s(\w*).*',line)ifmatchObj:print('matchObj.group():',matchObj.group())print('matchObj.group():',matchObj.group(1))print('matchObj.group():',matchObj.group(2))print('matchObj.group():',matchObj.group(3))else:print('nomatch!')#从初始位置开始匹配importreline='icanspeakgoodenglish'matchObj=re.match(r'(i)\s(\w*)\s(\w*).*',line)ifmatchObj:print('matchObj.group():',matchObj.group())print('matchObj.group():',matchObj.组(1))print('matchObj.group():',matchObj.group(2))print('matchObj.group():',matchObj.group(3))else:print('nomatch!')2.2搜索函数的工作方式与match()相同,但search()不是从头开始匹配,而是从任意位置找到第一个匹配项。以下是此函数的语法:re.match(pattern,string,flags=0)以下是参数说明:pattern-这是要匹配的正则表达式。string-这是将在字符串开头搜索匹配模式的字符串。标志-可以使用按位或(|)指定不同的标志。这些是修饰符,如下表所列。re.search函数在成功时返回匹配对象,否则返回None。使用匹配对象的group(num)或groups()函数来获取匹配的表达式。示例importreline='icanspeakgoodenglish'matchObj=re.search('(.*)(.*?)(.*)',line)ifmatchObj:print('matchObj.group():',matchObj.group())print('matchObj.group():',matchObj.group(1))print('matchObj.group():',matchObj.group(2))print('matchObj.group():',matchObj.group(3))else:print('nomatch!')2.3使用正则表达式的sub函数re模块中最重要的一个是sub。re.sub(pattern,repl,string,max=0)此方法用repl替换REpattern中所有出现的字符串,除非提供了max,否则替换所有出现的字符串。此方法返回修改后的字符串。示例importreline='icanspeakgoodenglish'speak=re.sub(r'can','not',line)print(speak)speak1=re.sub(r'\s','',line)#替换所有空格print(speak1)3特殊类语法3.1字符类3.2特殊字符类3.3重复匹配3.4非贪婪重复本次匹配最少重复次数:3.5括号分组3.6反向引用与之前匹配的组匹配3.7锚点需要指定匹配位置。3.8带括号的特殊语法