设为首页 加入收藏

TOP

Python爬虫 正则表达式(二)
2017-10-09 17:28:40 】 浏览:9260
Tags:Python 爬虫 正则 表达式
.第四个匹配,同第二个匹配原理,即使遇到了空格符也不会受影响。

我们还看到最后打印出了result.group(),这个是什么意思呢?下面我们说一下关于match对象的的属性和方法
Match对象是一次匹配的结果,包含了很多关于此次匹配的信息,可以使用Match提供的可读属性或方法来获取这些信息。

 

    属性:
    1.string: 匹配时使用的文本。
    2.re: 匹配时使用的Pattern对象。
    3.pos: 文本中正则表达式开始搜索的索引。值与Pattern.match()和Pattern.seach()方法的同名参数相同。
    4.endpos: 文本中正则表达式结束搜索的索引。值与Pattern.match()和Pattern.seach()方法的同名参数相同。
    5.lastindex: 最后一个被捕获的分组在文本中的索引。如果没有被捕获的分组,将为None。
    6.lastgroup: 最后一个被捕获的分组的别名。如果这个分组没有别名或者没有被捕获的分组,将为None。

    方法:
    1.group([group1, …]):
    获得一个或多个分组截获的字符串;指定多个参数时将以元组形式返回。group1可以使用编号也可以使用别名;编号0代表整个匹配的子串;不填写参数时,返回group(0);没有截获字符串的组返回None;截获了多次的组返回最后一次截获的子串。
    2.groups([default]):
    以元组形式返回全部分组截获的字符串。相当于调用group(1,2,…last)。default表示没有截获字符串的组以这个值替代,默认为None。
    3.groupdict([default]):
    返回以有别名的组的别名为键、以该组截获的子串为值的字典,没有别名的组不包含在内。default含义同上。
    4.start([group]):
    返回指定的组截获的子串在string中的起始索引(子串第一个字符的索引)。group默认值为0。
    5.end([group]):
    返回指定的组截获的子串在string中的结束索引(子串最后一个字符的索引+1)。group默认值为0。
    6.span([group]):
    返回(start(group), end(group))。
    7.expand(template):
    将匹配到的分组代入template中然后返回。template中可以使用\id或\g、\g引用分组,但不能使用编号0。\id与\g是等价的;但\10将被认为是第10个分组,如果你想表达\1之后是字符’0’,只能使用\g0。

 下面用一个例子来体会一下

 

 1 #coding:utf8
 2 import re
 3 # 匹配如下内容:单词+空格+单词+任意字符
 4 m = re.match(r'(\w+) (\w+)(?P<sign>.*)', 'hello world!')
 5  
 6 print "m.string:", m.string
 7 print "m.re:", m.re
 8 print "m.pos:", m.pos
 9 print "m.endpos:", m.endpos
10 print "m.lastindex:", m.lastindex
11 print "m.lastgroup:", m.lastgroup
12 print "m.group():", m.group()
13 print "m.group(1,2):", m.group(1, 2)
14 print "m.groups():", m.groups()
15 print "m.groupdict():", m.groupdict()
16 print "m.start(2):", m.start(2)
17 print "m.end(2):", m.end(2)
18 print "m.span(2):", m.span(2)
19 print r"m.expand(r'\g \g\g'):", m.expand(r'\2 \1\3')

输出结果:

m.string: hello world!
m.re: 
m.pos: 0
m.endpos: 12
m.lastindex: 3
m.lastgroup: sign
m.group(1,2): ('hello', 'world')
m.groups(): ('hello', 'world', '!')
m.groupdict(): {'sign': '!'}
m.start(2): 6
m.end(2): 11
m.span(2): (6, 11)
m.expand(r'\2 \1\3'): world hello!

 

(2)re.search(pattern, string[, flags])

search方法与match方法极其类似,区别在于match()函数只检测re是不是在string的开始位置匹配,search()会扫描整个string查找匹配,match()只有在0位置匹配成功的话才有返回,如果不是开始位置匹配成功的话,match()就返回None。同样,search方法的返回对象同样match()返回对象的方法和属性。

 1 #coding:utf8
 2 #导入re模块
 3 import re
 4  
 5 # 将正则表达式编译成Pattern对象
 6 pattern = re.compile(r'world')
 7 # 使用search()查找匹配的子串,不存在能匹配的子串时将返回None
 8 # 这个例子中使用match()无法成功匹配
 9 match = re.search(pattern,'hello world!')
10 if match:
11     # 使用Match获得分组信息
12     print match.group()
13 ### 输出 ###
14 # world

(3)re.split(pattern, string[, maxsplit])

按照能够匹配的子串将string分割后返回列表。maxsplit用于指定最大分割次数,不指定将全部分割。

 

#coding:utf8
import re

pattern = re.compile(r'\d+')
print re.split(pattern,'one1two2three3four4')
 

 输出结果:

['one', 'two', 'three', 'four', '']

 

(4)re.findall(pattern, string[, flags])

搜索string,以列表形式返回全部能匹配的子串

1 #coding:utf8
2 import re
3 
4 pattern = re.compile(r'\d+')
5 print re.findall(pattern,'one1two2three3four4')
6  
['1', '2', '3', '4']

 

(5)re.finditer(pattern, string[, flags]

首页 上一页 1 2 3 4 下一页 尾页 2/4/4
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇python2.7.X 升级至Python3.6.X 下一篇使用Python对SQLite数据库操作

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目