找回密码
 立即注册

扫一扫,访问微社区

QQ登录

只需一步,快速开始

查看: 3973|回复: 2

[求助] 请教一个正则问题

1

主题

2

帖子

7

积分

贫民

积分
7
aa67345 发表于 2014-7-22 15:56:31 | 显示全部楼层 |阅读模式
>>> p = re.compile('([ab])')
>>> p.match('ab').groups()
('a',)
>>> p = re.compile('([ab])+')
>>> p.match('ab').groups()
('b',)

为什么后面有个+号之后,就会是‘b'呢?请大神解释一下

回复

使用道具 举报

0

主题

20

帖子

20

积分

贫民

积分
20
赵大班长1 发表于 2014-7-22 17:37:38 | 显示全部楼层
import re

p = re.compile('([a-z])')
print p.match('abcd').groups()
print p.match('abcd').span()
print re.findall(p,'abcd')

p = re.compile('([a-z])+')
print p.match('abcd').groups()
print re.findall(p,'abcd')
print p.match('abcd').span()

结果:
('a',)
(0, 1)
['a', 'b', 'c', 'd']
('d',)
['d']
(0, 4)

个人感觉,没有“+”的时候默认匹配一次一个,在加上“+”以后匹配一次以上的次数,最终落到最后一个符合条件的字符上

+

一次或多次匹配前面的字符或子表达式。例如,“zo+”与“zo”和“zoo”匹配,但与“z”不匹配。+ 等效于 {1,}。
http://msdn.microsoft.com/zh-cn/library/ae5bf541(v=vs.80).aspx
回复 支持 反对

使用道具 举报

0

主题

20

帖子

20

积分

贫民

积分
20
赵大班长1 发表于 2014-7-22 17:51:30 | 显示全部楼层
import re
p = re.compile('([a-z])')
print p.match('abcd').groups()
print p.match('abcd').span()
print re.findall(p,'abcd')
p = re.compile('([a-z])+')
print p.match('abcd').groups()
print re.findall(p,'abcd')
print p.match('abcd').span()
结果:
('a',)
(0, 1)
['a', 'b', 'c', 'd']
('d',)
['d']
(0, 4)
个人认为:
没有“+”的情况是匹配一次,返回第一;有“+”的情愫是匹配至少1次,返回最后一个结果

+

一次或多次匹配前面的字符或子表达式。例如,“zo+”与“zo”和“zoo”匹配,但与“z”不匹配。+ 等效于 {1,}。

回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

快速回复 返回顶部 返回列表