原子:正则表达式中最基本的组成单位,每个正则表达式中至少包含一个原子,原子有以下几类
(1)普通字符作为原子
(2)非打印字符作为原子
(3)通用字符作为原子
(4)原子表
(1)普通字符作为原子
import re
pattern = "yue"
string = "http://yum.iqianyue.com"
result = re.search(pattern, string)
print("普通字符作为原子结果:%s"%result)
# 普通字符作为原子结果:<_sre.SRE_Match object; span=(16, 19), match='yue'>
(2)非打印字符作为原子
非打印字符指的事一些字符串中用于格式控制的符号,比如换行符
\n 匹配一个换行符 \t匹配一个制表符
import re
pattern = "\n"
string = """http://www.baidu.com
http://yum.iqianyue.com"""
result = re.search(pattern, string)
print("非打印字符作为原子结果:%s"%result)
# 非打印字符作为原子结果:<_sre.SRE_Match object; span=(20, 21), match='\n'>
(3)通用字符作为原子
一个原子可以匹配一类字符
字母 | 意义 |
---|---|
/w | 匹配任意一个字母、数字或者下划线 |
/W | 匹配除字母、数字和下划线意外的任意一个字符 |
/d | 匹配仍以一个十进制数 |
/D | 匹配除十进制数意外的任意一个其他字符 |
/s | 匹配任意一个空白字符 |
/S | 匹配除空白字符意外的任意一个其他字符 |
例子:’\w\dpython\w’对 ‘python’字符进行匹配,字符最后一个是字母、数字或下划线,字符前一位是任意的十进制数,再前一位置是一个字母数字或下划线的格式字符串,如’67python8’,’u2python_’
import re
pattern = "\w\dpython\w"
string = "abcdfphp345python_py"
result = re.search(pattern, string)
print("通用字符作为原子结果:%s"%result)
# 通用字符作为原子结果:<_sre.SRE_Match object; span=(9, 18), match='45python_'>
(4)原子表
定义一组地位平等的原子,然后匹配的时候会取该原子表中的任意一个原子进行匹配。
在Python中,原子表由[]表示,比如[xyz],就是一个原子表,这个原子表中定义了3个原子,这3个原子的地位平等。
例子:
(1)定义了表达式’[xyz]py’,对应的源字符串是’xpython’,如果此时使用re.search()函数进行匹配,就可以匹配出结果’xpy’,因此只要py前一位是xyz字母中的其中一个字母就可以匹配成功。
(2)类似的[^]代表的事除了中括号里面的原子均可以匹配,比如’[^xyz]py’能匹配’apy’,但不能匹配’xpy’
import re
pattern1 = "\w\dpython[xyz]\w"
pattern2 = "\w\dpython[^xyz]\w"
pattern3 = "\w\dpython[xyz]\W"
string = "abcdfphp345pythony_py"
result1 = re.search(pattern1, string)
result2 = re.search(pattern2, string)
result3 = re.search(pattern3, string)
print("结果1:%s"%result1) # 结果1:45pythony_
print("结果2:%s"%result2) # 结果2:None 没有匹配成功所以都为none
print("结果3:%s"%result3) # 结果3:None