import re
str1='wangluochongcheng1601gaoxingyuan'
#普通字符为原子
pat1='gaoxingyuan'
res1=re.search(pat1,str1)
#print(res1)
#非打印字符为原子'\n':换行符 '\t':制表符
str2='''wangluochongcheng1601gaoxingyuan
'''
pat2='\n'
res2=re.search(pat2,str2)
#print(res2)
#通用字符作为原子
#'\w':字母,数字,下划线
#'\W'除字母,数字,下划线以外的任意字符
#'\d'十进制数
#'\D'除十进制数以外的任意字符
#'\s'空白字符也就是空格
#'\S'除空白字符以外的任意字符
#从str3中提取出一个3个字母和4个数字和1个除字母数字下划线外的字符的字符串
'''
str3='974195045gao08.'
pat3='\w\w\w\d\d\d\d\W'
res3=re.search(pat3,str3)
print(res3)
'''
#原子表[]:只能从原子表中选一个原子出来
'''
str4='974195045gao08.'
pat4='974195[and0jkc]45'
res4=re.search(pat4,str4)
print(res4)
'''
#[^and0jkc]代表非里面的元素,除里面的元素以外
#所以如果pat4=[^and0jkc]将不能匹配成功
#元字符
'''
. 除换行符外任意一个字符
pat='gao.....'
^ 匹配字符串开始的位置
pat='^974'
$ 匹配字符串结束的位置
pat='21.$'
* 前面的那个字符出现0\1\多次
pat='gao*'
?前面的那个字符出现0\1次
pat='gao?'
+ 前面的那个字符出现1\多次
str='974195045gaooooo0821.'
pat='gao+'
{n} 前面的那个字符恰好出现n次,n为数字
pat='gao{5}'
{n,} 前面的那个字符至少出现n次
pat='gao{3,}'匹配出来会是他的最高次数的字符串
比如上面的str会匹配出gaooooo
{n,m} 前面的字符至少出现n次,至多出现m次
| 模式选择符 或
() 模式单元
'''
#模式修正符
'''
I 匹配时忽略大小写*
M 多行匹配*
L 本地化识别匹配
U unicode
S 让.匹配包括换行符*
string='Python'
pat='pyt'
rst=re.search(pat,string,re.I)
print(rst)
'''
#贪婪模式与懒惰模式
#默认的模式就时贪婪模式
'''
string='poythony'
#贪婪模式
pat1='p.*y'
#懒惰模式
pat2='p.*?y'
rst1=re.search(pat1,string,re.I)
rst2=re.search(pat2,string,re.I)
print(rst1)
print(rst2)
'''
#正则表达式函数
# re.match() re.search() 全局匹配函数 re.sub()
#re.match() 只能从头开始匹配
'''
string='poythony'
pat='p.*?y'
#pat='o.*?y'将不能匹配
rst=re.match(pat,string)
print(rst)
'''
#全局匹配格式 re.compile(正则表达式).findall(数据)
'''
string='poytphonypdsay'
pat='p.*?y'
rst=re.compile(pat).findall(string)
print(rst)
'''
#实例:匹配.com和.cn网址
#[\S]或[^\s]都可以表示非空
'''
string="<a href='http://www.baidu.com'>百度首页</a>"
pat="[a-zA-z]+://[\S]*[.com|.cn]"
rst=re.compile(pat).findall(string)
print(rst)
'''
#实例:匹配电话号码
#/d表示只匹配十进制数
'''
number='dsanjkl123nmkldnsa021-12355512dxca0731-5581313dsa9234'
pat="\d{4}-\d{7}|\d{3}-\d{8}"
rst=re.compile(pat).findall(number)
print(rst)
'''
正则表达式
最新推荐文章于 2024-07-12 16:16:27 发布