python match函数_Python里面search()和match()的区别?

'''

正则一般是用来匹配,比如电话号码和人匹配

'''

'''

re.match函数#match:re.match尝试从字符串的起始位置匹配一个模式,如果不是起始位置

函数语法:

re.match(pattern,string,flags=0)

re.search函数#search:re.search扫描整个字符串并返回第一个成功的匹配。

函数语法:

re.search(pattern,string,flags=0)

pattern匹配的正则表达式

string要匹配的字符串。

flags标志位,用于控制正则表达式的匹配方式,如:是否区分大小写,多行匹配等等。参见:正则表达式修饰符-可选标志

pattern:

^匹配字符串的开头

$匹配字符串的末尾。

.匹配任意字符,除了换行符,当re.DOTALL标记被指定时,则可以匹配包括换行符的任意字符。

[...]用来表示一组字符,单独列出:[amk]匹配'a','m'或'k'

[^...]不在[]中的字符:[^abc]匹配除了a,b,c之外的字符。

re*匹配0个或多个的表达式。

re+匹配1个或多个的表达式。

re?匹配0个或1个由前面的正则表达式定义的片段,非贪婪方式

re{n}精确匹配n个前面表达式。例如,o{2}不能匹配"Bob"中的"o",但是能匹配"food"中的两个o。

re{n,}匹配n个前面表达式。例如,o{2,}不能匹配"Bob"中的"o",但能匹配"foooood"中的所有o。"o{1,}"等价于"o+"。"o{0,}"则等价于"o*"。

re{n,m}匹配n到m次由前面的正则表达式定义的片段,贪婪方式

a|b匹配a或b

(re)匹配括号内的表达式,也表示一个组

(?imx)正则表达式包含三种可选标志:i,m,或x。只影响括号中的区域。

(?-imx)正则表达式关闭i,m,或x可选标志。只影响括号中的区域。

(?:re)类似(...),但是不表示一个组

(?imx:re)在括号中使用i,m,或x可选标志

(?-imx:re)在括号中不使用i,m,或x可选标志

(?#...)注释.

(?=re)前向肯定界定符。如果所含正则表达式,以...表示,在当前位置成功匹配时成功,否则失败。但一旦所含表达式已经尝试,匹配引擎根本没有提高;模式的剩余部分还要尝试界定符的右边。

(?!re)前向否定界定符。与肯定界定符相反;当所含表达式不能在字符串当前位置匹配时成功

(?>re)匹配的独立模式,省去回溯。

\w匹配字母数字及下划线

\W匹配非字母数字及下划线

\s匹配任意空白字符,等价于[\t\r\f].

\S匹配任意非空字符

\d匹配任意数字,等价于[0-9].

\D匹配任意非数字

\A匹配字符串开始

\Z匹配字符串结束,如果是存在换行,只匹配到换行前的结束字符串。

\z匹配字符串结束

\G匹配最后匹配完成的位置。

\b匹配一个单词边界,也就是指单词和空格间的位置。例如,'er\b'可以匹配"never"中的'er',但不能匹配"verb"中的'er'。

\B匹配非单词边界。'er\B'能匹配"verb"中的'er',但不能匹配"never"中的'er'。

,\t,等.匹配一个换行符。匹配一个制表符。等

\1...\9匹配第n个分组的内容。

\10匹配第n个分组的内容,如果它经匹配。否则指的是八进制字符码的表达式。

flags:可选,表示匹配模式,比如忽略大小写,多行模式等,具体参数为:

re.I忽略大小写

re.L表示特殊字符集\w,\W,\b,\B,\s,\S依赖于当前环境

re.M多行模式

re.S即为.并且包括换行符在内的任意字符(.不包括换行符)

re.U表示特殊字符集\w,\W,\b,\B,\d,\D,\s,\S依赖于Unicode字符属性数据库

re.X为了增加可读性,忽略空格和#后面的注释

正则表达式实例:

实例:描述:

[Pp]ython匹配"Python"或"python"

rub[ye]匹配"ruby"或"rube"

[aeiou]匹配中括号内的任意一个字母

[0-9]匹配任何数字。类似于[0123456789]

[a-z]匹配任何小写字母

[A-Z]匹配任何大写字母

[a-zA-Z0-9]匹配任何字母及数字

[^aeiou]除了aeiou字母以外的所有字符

[^0-9]匹配除了数字外的字符

'''

importre

#search:re.search扫描整个字符串并返回第一个成功的匹配。

result=re.search('wuyanzu','wuyanzu.cn')#直接输入要匹配的字符串

print(result.group())

#match:re.match尝试从字符串的起始位置匹配一个模式,如果不是起始位置匹配成功的话,match()就返回none。

result=re.match('wuyanzu','wuyanzu.cn').group()#group输出匹配的值

print(result)

a=re.match('[^asdhH]+?','woknhlj').group()#[^...]是表示不在[]中的字符:[^abc]匹配除了a,b,c之外的字符。

print(a)#+表示取一个或多个,是贪婪。+?表示非贪婪贪婪模式是把所有匹配的获取到,非贪婪模式只取到第一个匹配到的字符串

b=re.match('[a-zA-Z0-9_]*','12_3ds').group()#表示匹配到的可以是a-z或A-Z或0-9或下划线,*是取0个或多个

print(b)

b=re.match('[a-zA-Z0-9_]{4}','12_3ds').group()#表示匹配到的可以是a-z或A-Z或0-9或下划线,只取四个值

print(b)

b=re.match('[a-zA-Z0-9_]{2,5}','12_3ds').group()#匹配2-5位的值

print(b)

b=re.match('^4.*[369]$','4dfvea12453').group()#这里的^表示    匹配字符串的开头,?表示取0个或1个,$表示匹配字符串的末尾。

print(b)#match匹配从左边第一个匹配

b=re.search('4.*[369]$','24dfvea12459').group()#search匹配是从整体里找符合条件的

print(b)

c=re.match(r'[\w]{4,20}@163.com','949978171@163.com').group()#实例:匹配网易163邮箱

print(c)

mylist=['apple','banana','pen','orange']#判断匹配的数据列表里有没有,有返回数据,没有返回没有

foriinmylist:

a=re.match('apple|pen',i)#|是或者的意思

ifa:

print(a.group())

else:

print('没有')

#mylist=[]#匹配163邮箱或者126邮箱,有输出邮箱,没有输出没有

#mylist.append(input('请输入邮箱:'))

#foriinmylist:

#

#a=re.match('[\w]{4,20}@(126|163)\.com',i)

#ifa:

#print(a.group())

#print(a.group(1))

#else:

#print('没有')

mylist=['010-8989345','020-321532','0103425431','0111-3713456']#匹配显示区号与号码

foriinmylist:

a=re.match('(0[1-9][0-9]{1,2})-?(\d{6,8})',i)#()表示分组,分组的编码是从1开始

ifa:

print('区号:',a.group(1))#表示分组1的内容

print('号码',a.group(2))#表示分组2的内容

else:

print('没有找到')

mystr='c:\\a\\b\\c'

a=re.match('c:\\\\a\\\\b\\\\c',mystr).group()

print(a)

b=re.match(r'c:\\a\\b\\c',mystr).group()#r作用:使用字符串的原始意义,就不用在使用很多转义字符

print(b)

#'''匹配网页'''

#importre

#

#

#content='helloworld'

#

#obj=re.match('(.*)[a-zA-Z0-9]+>',content)

#ifobj:

#print(obj.group(1))

#else:

#print('0')

#

#

#

#

#obj=re.match('(.*)\\1>',content)#第一个\表示转义字符,第二个\1表示用group(1)

#ifobj:

#print(obj.group(2))

#else:

#print('0')

#

#

#obj=re.match(r'(.*)\1>',content)#有r就是使用原始意义

#ifobj:

#print(obj.group(2))

#else:

#print('0')

importre

content1='

helloworld'

obj=re.match('[a-zA-Z0-9]+)>[a-zA-Z0-9]+)>(.*)(?P=name2)>(?P=name1)>',content1)#分组命名格式(?P)

ifobj:

print(obj.group(3))

else:

print('0')

importre

content='我想买10斤苹果,总价2元'

obj=re.findall('\d+',content)#不用group,他直接输出是一个列表

print(obj)

print(obj[1])

a=re.sub('\d+','100',content)#对被替换的copy一份再改,对原来数据不改变

print(a)

print(content)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值