正则表达式并不是Python的一部分。正则表达式是用于处理字符串的强大工具,拥有自己独特的语法以及一个独立的处理引擎,效率上可能不如str自带的方法,但功能十分强大。得益于这一点,在提供了正则表达式的语言里,正则表达式的语法都是一样的,区别只在于不同的编程语言实现支持的语法数量不同。
下图展示了使用正则表达式进行匹配的流程:
正则表达式的大致匹配过程是:依次拿出表达式和文本中的字符比较,如果每一个字符都能匹配,则匹配成功;一旦有匹配不成功的字符则匹配失败。如果表达式中有量词或边界,这个过程会稍微有一些不同,但也是很好理解的,看下图中的示例以及自己多使用几次就能明白。
下图列出了Python支持的正则表达式元字符和语法:
re 模块使 Python 语言拥有全部的正则表达式功能,re 模块也提供了与这些方法功能完全一致的函数,这些函数使用一个模式字符串做为它们的第一个参数。
re.match 尝试从字符串的起始位置匹配一个模式,如果不是起始位置匹配成功的话,match() 就返回 none。
函数语法:
参数 描述
pattern 匹配的正则表达式
string 要匹配的字符串。
flags 标志位,用于控制正则表达式的匹配方式,如:是否区分大小写,多行匹配等等。参见:正则表达式修饰符 - 可选标志
匹配成功 re.match 方法返回一个匹配的对象,否则返回 None。
匹配对象方法 描述
group(num=0) 匹配的整个表达式的字符串,group() 可以一次输入多个组号,在这种情况下它将返回一个包含那些组所对应值的元组。
groups() 返回一个包含所有小组字符串的元组,从 1 到 所含的小组号。
举例说明:
import re print (re.match('hello','hello xiaofeng dada').span()) #在起始位置匹配 print (re.match('dada','hello xiaofeng dada'))#没有在起始位置配置 chuhe = "I love china very very very love" match = re.match(r'(.*) love (.*?) .*',chuhe,re.M|re.I) if match: print ('match.group():',match.group()) print ('match.group(1):',match.group(1)) print ('match.group(2):',match.group(2)) else: print ("啥也没匹配到!")
输出结果:
re.search 尝试从字符串的起始位置匹配一个模式,如果不是起始位置匹配成功的话,match() 就返回 none。
函数语法:
参数 描述
pattern 匹配的正则表达式
string 要匹配的字符串。
flags 标志位,用于控制正则表达式的匹配方式,如:是否区分大小写,多行匹配等等。参见:正则表达式修饰符 - 可选标志
匹配成功 re.research 方法返回一个匹配的对象,否则返回 None。
匹配对象方法 描述
group(num=0) 匹配的整个表达式的字符串,group() 可以一次输入多个组号,在这种情况下它将返回一个包含那些组所对应值的元组。
groups() 返回一个包含所有小组字符串的元组,从 1 到 所含的小组号。
举例说明:
import re print (re.search('hello','hello xiaofeng dada').span())#在起始位置进行配置 print (re.search('dada','hellow xiaofeng dada').span()) #没有在起始位置配置 chuhe = "I love china very very very love" match = re.search(r'(.*) love (.*?) .*',chuhe,re.M|re.I) if match: print ('match.group():',match.group()) print ('match.group(1):',match.group(1)) print ('match.group(2):',match.group(2)) else: print ("啥也没匹配到!")
输出结果:
举例说明:
chuhe = "I love china very very very love" match = re.match(r'china',chuhe,re.M|re.I) if match: print ("匹配到了:",match.group()) else: print ("啥也没匹配到!") match = re.search(r'china',chuhe,re.M|re.I) if match: print ("匹配到了:",match.group()) else: print ("啥也没匹配到!")
输出结果:
pattern : 正则中的模式字符串。
repl : 替换的字符串,也可为一个函数。
string : 要被查找替换的原始字符串。
count : 模式匹配后替换的最大次数,默认 0 表示替换所有的匹配
举例说明:
smartphone = '15195371573 ——#小编的手机号码' num = re.sub(r'#.*$'," ",smartphone) print(num) number = re.sub(r'\D',"",smartphone)#替换非数字以外所有字符 print (number)
输出结果: