原子是正则表达式的最基本的组成单位,而且在每个模式中最少包含一个原子。原子是由所有那些未显示指定为元字符的打印和非打印字符组成。
原子分类
1.普通字符作为原子
普通字符是编写正则表达式时最常见的原子了,包括所有的大写和小写字母字符、所有数字等。例如,a——z、A——Z、0——9。
#-*- codingn:utf-8 -*- import re pattern = 'lo' String = "I love you" #re.search()函数对整个字符串搜索,并返回第一个匹配字符串的match对象 Result = re.search(pattern,String) print("普通字符作为原子的结果:%s"%Result)
运行结果
2.一些特殊字符和元字符作为原子
任何一个符号都可以作为原子使用,但如果这个符号在正则表达式中有一些特殊意义,我们就必须使用转义字符“”取消它的特殊意义,将其变成一个普通的原子。例如,所有标点符号以及一些其他符号,双引号“””、单引号“’”、“*”、“+”、“.”等,如果当原子就必须像”、’、+和.这样使用。
#-*- codingn:utf-8 -*- import re #需要转义 pattern = '+' String = "a+b=c" #re.search()函数对整个字符串搜索,并返回第一个匹配字符串的match对象 Result = re.search(pattern,String) print("特殊字符作为原子的结果:%s"%Result)
运行结果
3.一些非打印字符作为原子
所谓的非打印字符,是一些在字符串中的格式控制符号,例如: 回车及 制表符号等。例如下表所示列出了正则表达式中常用的非打印字符及其含义。
#-*- codingn:utf-8 -*- import re pattern = ' ' String = """zhang san""" #re.search()函数对整个字符串搜索,并返回第一个匹配字符串的match对象 Result = re.search(pattern,String) print("非打印字符作为原子的结果:%s"%Result)
4.使用“通用字符类型”作为原子
前面介绍的不管是打印字符还是非打印字符作为原子,都是一个原子只能匹配一个字符。而有时我们需要一个原子可以匹配一类字符,例如,匹配所有数字不是一个数字,匹配所有字母而不是一个字母,这时就要使用“通用字符类型”了。
字母 | 意义 |
/w | 匹配任意一个字母、数字或者下划线 |
/W | 匹配除字母、数字和下划线意外的任意一个字符 |
/d | 匹配仍以一个十进制数 |
/D | 匹配除十进制数意外的任意一个其他字符 |
/S | 匹配除空白字符意外的任意一个其他字符 |
/s | 匹配任意一个空白字符 |
#-*- codingn:utf-8 -*- import re pattern ='whow' String = "wo shi who23" #re.search()函数对整个字符串搜索,并返回第一个匹配字符串的match对象 Result = re.search(pattern,String) print("通配符作为原子的结果:%s"%Result)
运行结果:
5.原子表
代表某一类的原子太多了,系统不能全都给提供出来,例如数字中的奇数(1、3、5、7、9、)、字母中的元音字母(a、e、i、o、u)等。所以就需要我们可以自己定义出特定的“类原子”,使用原子表“[]”就可以定义一组彼此地位平等的原子,且从原子表中仅选择一个原子进行匹配
在Python中,原子表由[]表示,比如[xyz],就是一个原子表,这个原子表中定义了3个原子,这3个原子的地位平等。
#-*- codingn:utf-8 -*- import re pattern1 ='wf[gj]w' pattern2 ='wf[^gj]w' pattern3 ='wf[gj]W' String = "abcdefgjikdlfk" #re.search()函数对整个字符串搜索,并返回第一个匹配字符串的match对象 Result1 = re.search(pattern1,String) Result2 = re.search(pattern2,String) Result3 = re.search(pattern3,String) print("pattern1:%s"%Result1) print("pattern2:%s"%Result2) print("pattern3:%s"%Result3)
运行结果: