原子表:
[xyz]abc,其中x,y,z是平行关系,即xabc,yabc,zabc都可以是匹配结果
[^]表示除了中括号内的元素以外都能匹配
任意匹配元字符:.
边界限制元字符:^,$
限定符:*,?,+,{n},{n,},{n,m}
模式选择符:|,a|b时a和b都可以作为匹配模式
模式单元符:将一些原子组合成大原子使用
使用“re.符号”的方式作为参数加入到函数中
贪婪模式:尽可能多的匹配,". "
懒惰模式:尽可能少的匹配,且为就近匹配,".?"
常见函数:
1.re.match()函数:
从起始位置开始匹配,如果一开始就匹配不了,直接返回None
re.match(pattern,string,flag)
pattern:表达式
string:源字符
flag:标志位,放模式修正符
2.re.search函数:
在全文中匹配,如果全文都匹配不了,再返回None
re.search(pattern,string,flag)
pattern:表达式
string:源字符
flag:标志位,放模式修正符
3.re.compile()函数:
全局匹配:将满足匹配的所有结果都提取出来
方法:
- 使 用 re.compile() 对 正 则 表 达 式 进 行 预 编 译 。
- 编 译 后 , 使 用 findall() 根 据 正 则 表 达 式 从 源 字 符 串 中 将 匹 配 的 结 果 全 部 找 出 。
我 们 可 以 通 过 以 下 实 例 更 好 地 理 解 :
import re
string = "hellomypythonhispythonourpythonend"
pattern = re.compile(".python.")# 预 编 译
result = pattern.findall(string)# 找 出 符 合 模 式 的 所 有 结 果
print (result)
4.re.sub()函数:
替换字符串,返回替换后的字符串
re.sub(pattern,rep, string ,max )
其中,第一个参数为对应的正则表达式,第二个参数为要替换成的字符串,第三个参数
为源字符串,第四个参数为可选项,代表最多替换的次数,如果忽略不写,则会将符合模式
的结果全部替换。
使用re.sub()这个函数,会根据正则表达式pattern,从源字符串string查找出符合模式
的结果,并替换为字符申rep,最多可替换max次。
实例:
1.匹配网址:
import re
pattern = "[a-ZA-Z]+://[^\S]*[.com|.cn]"
string = "<a href="http://www.baidu.com">百度首页</a>"
result = re.search(pattern,string)
print(resu1t)
首先,"://"是固定的,可以写出来,然后我们要以.com或者.cn结尾,所以正则表达式
的最后应该是[.coml.cn],在":/"与[.coml.cn]之间,不能现空格,所以我们可以写为[^\s]*,
在":/"之前,必须要有内容,所以此时至少要有一次重复,故而我们用"+"而不用"*",
这些内容可以是任意的字母的组合,包括大小写,所以可以写为[a-zA-Z],组合起来,
正则表达式就是:"[a-ZA-Z]+://[^\S]*[.com|.cn]"