Python正则表达式中()的作用
2014-05-15 22:25
148 查看
使用小括号指定一个子表达式后,匹配这个子表达式的文本(也就是此分组捕获的内容)可以在表达式或其它程序中作进一步的处理。默认情况下,每个分组会自动拥有一个组号,规则是:从左向右,以分组的左括号为标志,第一个出现的分组的组号为1,第二个为2,以此类推。
先举两个例子。
例子一
>>> p=re.compile('(\d)-(\d)-(\d)')
>>> m=p.match('1-2-3')
>>> m.group()
'1-2-3'
>>> m.group(1)
'1'
>>> m.group(2)
'2'
>>> m.group(3)
'3'
例子二
>>> p=re.compile('(\d)-\d-(\d)') #这里第二个\d的括号去掉了
>>> m=p.match('1-2-3')
>>> m.group()
'1-2-3'
>>> m.group(1)
'1'
>>> m.group(2)
'3'
>>> m.group(3)
Traceback (most recent call last):
File "<pyshell#54>", line 1, in <module>
m.group(3)
IndexError: no such group
可以发现, group的个数和正则表达式中的括号数目是有所对应的。从第一个例子来看,m.group()和m.group(0)的结果是一样的;m.group(1)是匹配的第一段;m.group(2)是匹配的第二段;m.group(3)是匹配的第三段。在例子二种,由于正则表达式中间缺少了一个括号,所以,m.group()和m.group(0)的结果是一样的;m.group(1)是匹配的第一段;m.group(2)是匹配的第三段。
另外在举例子三和例子四。
例子三
>>> matchObj = re.compile(r'(\d+)\.(\d*)')
>>> m = matchObj.match('3.14sss')
>>> m.group()
'3.14'
>>> print m.group()
3.14
>>> m.group(0)
'3.14'
>>> m.group(1)
'3'
>>> m.group(2)
'14'
>>> m.group(3)
Traceback (most recent call last):
File "<pyshell#28>", line 1, in <module>
m.group(3)
IndexError: no such group
>>> m.group(1,2)
('3', '14')
>>> m.group(0,1,2)
('3.14', '3', '14')
例子四
>>> matchObj = re.compile(r'(\d+)(\.)(\d*)')
>>> m = matchObj.match('3.14sss')
>>> m.group()
'3.14'
>>> m.group(0)
'3.14'
>>> m.group(1)
'3'
>>> m.group(2)
'.'
>>> m.group(3)
'14'
>>> m.group(0,1,2,3)
('3.14', '3', '.', '14')
例子三和例子四种正则表达式的区别在于,在例子四的正则表达式中,给\.加上了括号,所以匹配产生的结果也不同。
先举两个例子。
例子一
>>> p=re.compile('(\d)-(\d)-(\d)')
>>> m=p.match('1-2-3')
>>> m.group()
'1-2-3'
>>> m.group(1)
'1'
>>> m.group(2)
'2'
>>> m.group(3)
'3'
例子二
>>> p=re.compile('(\d)-\d-(\d)') #这里第二个\d的括号去掉了
>>> m=p.match('1-2-3')
>>> m.group()
'1-2-3'
>>> m.group(1)
'1'
>>> m.group(2)
'3'
>>> m.group(3)
Traceback (most recent call last):
File "<pyshell#54>", line 1, in <module>
m.group(3)
IndexError: no such group
可以发现, group的个数和正则表达式中的括号数目是有所对应的。从第一个例子来看,m.group()和m.group(0)的结果是一样的;m.group(1)是匹配的第一段;m.group(2)是匹配的第二段;m.group(3)是匹配的第三段。在例子二种,由于正则表达式中间缺少了一个括号,所以,m.group()和m.group(0)的结果是一样的;m.group(1)是匹配的第一段;m.group(2)是匹配的第三段。
另外在举例子三和例子四。
例子三
>>> matchObj = re.compile(r'(\d+)\.(\d*)')
>>> m = matchObj.match('3.14sss')
>>> m.group()
'3.14'
>>> print m.group()
3.14
>>> m.group(0)
'3.14'
>>> m.group(1)
'3'
>>> m.group(2)
'14'
>>> m.group(3)
Traceback (most recent call last):
File "<pyshell#28>", line 1, in <module>
m.group(3)
IndexError: no such group
>>> m.group(1,2)
('3', '14')
>>> m.group(0,1,2)
('3.14', '3', '14')
例子四
>>> matchObj = re.compile(r'(\d+)(\.)(\d*)')
>>> m = matchObj.match('3.14sss')
>>> m.group()
'3.14'
>>> m.group(0)
'3.14'
>>> m.group(1)
'3'
>>> m.group(2)
'.'
>>> m.group(3)
'14'
>>> m.group(0,1,2,3)
('3.14', '3', '.', '14')
例子三和例子四种正则表达式的区别在于,在例子四的正则表达式中,给\.加上了括号,所以匹配产生的结果也不同。
相关文章推荐
- 【语言处理与Python】3.5正则表达式的有益作用
- Python正则表达式中的re.S的作用详解
- Python正则表达式中的re.S的作用
- 转载:Python正则表达式的用法(1. 匹配)
- 正则表达式在python中的应用
- 比较详细Python正则表达式操作指南
- Python天天美味(15) - Python正则表达式操作指南(re使用)(转)
- 在python 中使用正则表达式
- 正则表达式:python将re转义符包装成普通字符的函数
- Python正则表达式操作指南
- 正则表达式中/g/I/M的作用
- Python 正则表达式操作指南
- python中正则表达式与re 模块
- Python正则表达式操作指南
- 比较详细Python正则表达式操作指南(re使用)
- Python正则表达式操作指南
- 正则表达式及其作用
- python中的一些正则表达式的含义
- Python正则表达式(一)
- Python 正则表达式操作指南