正则表达式

1.原子是正则表达式中最基本的组成单位,每个正则表达式中至少要包含一个原子(python自带re模块)

常见原子类型如下:

a.普通字符作为原子

b.非打印字符作为原子

c.通用字符作为原子

d.原子表

import re
string = "123aaa"
# 普通字符作为原子
pat = "123"
rst = re.search(pat,string)
print(rst)
# 非打印字符作为原子
# \n 换行符   \t 制表符
string = '''bbb
ddd
'''
pat = "\n"
rst = re.search(pat,string)
print(rst)
# 通用字符作为原子
'''
\w 字母,数字,下划线
\W 除字母,数字,下划线
\d 十进制数
\D 除十进制数
\s 空白字符
\S 除空白字符
'''
string = "jfjfj222 344hdh"
pat = "\w\d\s\d"
rst = re.search(pat,string)
print(rst)
# 原子表
string = "jfjfj222 344hdh"
pat = "jf[jfgs]f"
pat = "jf[^jfgs]f"
rst = re.search(pat,string)
print(rst)

2.元字符是正则表达式中具有一些特殊含义的字符,比如重复N次前面的字符等

# 元字符
'''
. 除换行符外的所有字符
^ 开始位置
$ 结束位置
* 0/1/多次
?0/1次
+ 1/多次
{n} 恰好n次
{n,} 至少n次
{n,m} 至少n次,至多m次
| 模式选择符或
() 模式单元
'''
string = "jfjfj222344hdh"
pat = "jf."
pat = "^jf."
pat = "hd.$"
pat = "j2[3]"
pat = "j2[2,]"
pat = "j2[1,2]"
rst = re.search(pat,string)
print(rst)

3.模式修正符指可以在不改变正则表达式的情况下,通过模式修正符高边正则表达式的含义,从而实现一些匹配结果的调整

# 模式修正符
'''
| 匹配时忽略大小写 *
M 多行匹配 *
L 本地化识别
U unicode
S 让.匹配包括换行符 *
'''
string = "Python"
pat = "pyt"
rst=re.search(pat,string,re.I)
print(rst)

4.贪婪模式与懒惰模式

贪婪模式的核心是尽可能多的匹配,懒惰模式的核心是尽可能少的匹配

# 贪婪模式与懒惰模式
string = "Pythony"
pat1 = "p.*y"  #贪婪模式
pat2 = "p.*?y" #懒惰模式 精准
rst=re.search(pat1,string,re.I)
rst2=re.search(pat2,string,re.I)
print(rst)
print(rst2)

5.正则表达式函数

正则表达式函数re.match()函数,re.search()函数,全局匹配函数,re.sub()函数

# 正则表达式函数
# 1、match  从开头进行匹配
string = "Pythony"
pat1 = "p.*?y" #懒惰模式 精准t
pat2 = "t.*?y" #懒惰模式 精准
rst1=re.match(pat1,string,re.I)
rst2=re.match(pat2,string,re.I)
print(rst1)
print(rst2)
# 2、search  从任意地方进行匹配
# 3.全局匹配函数
string = "Pwwythonpoyfsurerapay"
pat1 = "p.*?y" #懒惰模式 精准
# 全局匹配格式re.compile(正则表达式).findall(数据)
rst=re.compile(pat1,re.I).findall(string)
print(rst)

6.常见正则实例

匹配网址.com/.cn和电话号码

# 实例:匹配.com和.cn网址
string="<a href='http://www.baidu.com'>百度首页</a>"
pat = "[a-zA-Z]+://[^\s]*[.com|.cn]"
rst=re.compile(pat,re.I).findall(string)
print(rst)
# 实例:匹配电话号码  11位
string="djdhf027-5548742113300hkdfghkdfg0321-67093388282272727gurutrpp"
pat="\d{4}-\d{7}|\d{3}-\d{8}"
rst=re.compile(pat,re.I).findall(string)
print(rst)

 

posted @ 2019-07-25 16:34  Peach~  阅读(228)  评论(0编辑  收藏  举报