python search函数_python 正则表达式 (search与match函数)

一. search 与 matche函数

同样的正则表达式,match 打印的结果是空(没有匹配到结果); search打印的结果是match对象(匹配到了一个结果)

match 尝试从字符串的首字符开始匹配,如果match没有匹配相应的结果,将会返回一个空(None)

search 尝试搜索整个字符串,直到找到第一个满足正则表达式结果,然后将结果返回回来

#例子 1

import re

s = 'A84C73D28E67'

r = re.match('\d', s)

print(r)

r1 = re.search('\d', s)

print(r1)

#执行结果

$ python2.7 o11.py

None

Step 1.把字符串首字母去掉

import re

s = '84C73D28E67'

r = re.match('\d', s)

print(r)

r1 = re.search('\d', s)

print(r1)

# 执行结果

说明:match 和search 返回的结果都是match对象

$ python2.7 o11.py

Step 2.使用group方法获取match对象的结果

import re

s = '84C73D28E67'

r = re.match('\d', s)

print(r.group())

r1 = re.search('\d', s)

print(r1.group())

#执行结果

python2.7 o11.py

8

8

Step 3. match search 与 findall 的区别

从打印结果可以看到,match search  匹配到第一个满足正则表达式结果,然后将结果返回回来

findall 匹配整个字符串,将所以匹配的结果返回回来

import re

s = '84C73D28E67'

r = re.match('\d', s)

print(r.group())

r1 = re.search('\d', s)

print(r1.group())

r2 = re.findall('\d', s)

print(r2)

#执行结果

$ python2.7 o11.py

8

8

['8', '4', '7', '3', '2', '8', '6', '7']

二.group 组

Step 1. 取一段介于life 与 python之间的字符

例子1:使用life 和python 做定界;     \w 可以匹配所有单词字符;可见打印结果报错,没有匹配到,\w只能匹配一个字符

例子2:\w* 匹配* 号前面字符0次或无限次,但打印结果仍然报错,这是因为s 字符串中有空格字符,而\w 只匹配单词字符,空格字符不在单词字符里面,所以匹配不到

例子3:  . 匹配除换行符\n之外其他所有字符,当然也包括空格字符;成功打印介于life 与 python之间的字符;虽然是匹配到了 'life is short,i use python',要求是只获取'is short,i use' 这段字符

#例子 1

import re

s = 'life is short,i use python'

r = re.search('life\wpython', s)

print(r.group())

#执行结果

$ python2.7 o12.py

Traceback (most recent call last):

File "o12.py", line 6, in

print(r.group())

AttributeError: 'NoneType' object has no attribute 'group'

#例子 2

import re

s = 'life is short,i use python'

r = re.search('life\w*python', s)

print(r.group())

#执行结果

$ python2.7 o12.py

Traceback (most recent call last):

File "o12.py", line 6, in

print(r.group())

AttributeError: 'NoneType' object has no attribute 'group'

#例子3

import re

s = 'life is short,i use python'

r = re.search('life.*python', s)

print(r.group())

#执行结果

$ python2.7 o12.py

life is short,i use python

Step 2.1 group 组概念

group组的概念:

(

'life.*python'

, s) 看似目前没有对正则表达式进行分组,但实际上就是一个分组,只没有在外面加入小括号,因为只有一个分组,可以加小括号也可以不加,加了小括号的结果和不加小括号的结果是一样的(如例子1)

group函数的是可以传入一个参数的,这个参数就是指定要获取的组号,目前在这里只有一个组可以不传,默认组号是0

#例子1

import re

s = 'life is short,i use python'

r = re.search('(life.*python)', s)

print(r.group())

#执行结果

$ python2.7 o12.py

life is short,i use python

Step 2.2 group 组概念

例子1:把 .*  使用小括号括起来,取组号0;但返回的结果仍然是s 完整的字符串

group 0是比较特殊的情况,永远记录正则表达式完整匹配,若要匹配完整结果内部的某个分组的话,要从group 1开始访问

#例子1

import re

s = 'life is short,i use python'

r = re.search('life(.*)python', s)

print(r.group(0))

#执行结果

$ python2.7 o12.py

life is short,i use python

#例子2

import re

s = 'life is short,i use python'

r = re.search('life(.*)python', s)

print(r.group(1))

#执行结果

$ python2.7 o12.py

is short,i use

#例子4

#match search 对比 findall

说明:findall 会比match search 没那么复杂

import re

s = 'life is short,i use python'

r = re.findall('life(.*)python', s)

print(r)

#执行结果

$ python2.7 o12.py

[' is short,i use ']

Step 2.3 匹配多个组

groups 会返回正则表达式内的所有分组;

import re

s = 'life is short,i use python, hello world hello python '

r = re.search('life(.*)python(.*)python', s)

print(r.groups())

#执行结果

$ python2.7 o12.py

(' is short,i use ', ', hello world hello ')

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值