免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 4228 | 回复: 9
打印 上一主题 下一主题

这样的正则表达式为什么不对 请指教 多谢 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2009-11-02 17:58 |只看该作者 |倒序浏览
10可用积分
Python code

    s = 'hi hi Lucy' re.findall(r'hi?',s)



输出结果:
['hi', 'hi']

我只想输出一次hi 为什么会输出两个 '?'这个不是只匹配0次或者1次么

我又试了一下:
re.findall(r'hi{1}',s)
输出结果相同

请指教 为什么会输出两次hi,我用的方法不对么 该怎么改 请指教 多谢

论坛徽章:
0
2 [报告]
发表于 2009-11-02 18:07 |只看该作者
概念搞混了,?是表示在匹配的时候?前面那个字符 出现一次或不出现
也就是说 hi?  能匹配这两种情况
h         hi

而出现两次hi 是因为调用了findall, findall的作用是把字符串中符合正则的全找出来。

论坛徽章:
0
3 [报告]
发表于 2009-11-02 18:11 |只看该作者

回复 #2 gnujava 的帖子

但是我用纯正则表达式也是:
hi?
hi hi Lucy

输出结果:
hi
hi

该怎么改才能输出一次呢?多谢

论坛徽章:
0
4 [报告]
发表于 2009-11-02 18:17 |只看该作者
re.search(r'hi?', 'hi hi').group()

论坛徽章:
0
5 [报告]
发表于 2009-11-02 18:19 |只看该作者

回复 #4 gnujava 的帖子

能帮忙解释一下那样为什么不对么 为什么纯正则表达式 输出的结果也不是我想要的 谢谢

论坛徽章:
0
6 [报告]
发表于 2009-11-02 18:23 |只看该作者
上面不是解释了吗,你把正则功能理解成了函数功能,正则只管匹配,findall管用正则去找结果

你说的“纯正则表达式”是什么?是指perl风格,或shell风格正则?是不是说/s/abc/def/g 这种?

论坛徽章:
0
7 [报告]
发表于 2009-11-02 18:29 |只看该作者

回复 #6 gnujava 的帖子

我是在一个测试正则表达式的工具里面测试的 我现在不明白的是 我用"?" 既然表示?前面的字母出现一次或者0次 那么我觉得应该输出 i 或者我写 hi?的时候 应该输出一次hi, 为什么会输出两次呢hi呢. 是不是这样写 h?i?呢

论坛徽章:
0
8 [报告]
发表于 2009-11-02 18:49 |只看该作者
举个例子吧, 假设我们要在一群人中找一类特殊的人
正则 hi?  就相当于 找人的条件  : 是中国人(h)有房子或没房子(i?)

然后findall就开始一个人一个人的匹配,先第一个人,再第二个人,符合条件的都找出来。

出现两个hi hi 就相当于有两个人符合这种情况。

论坛徽章:
0
9 [报告]
发表于 2009-11-02 18:53 |只看该作者
如果用条件hi{1},就相当于中国人,且一定要有一套房子,而且只有一套房子
如果用条件hi+,就相当于中国人,且一定要有房子,而且至少有一套房子
如果用条件hi{2,3}就相当于中国人,且一定要有两套房子,而且最多有三套房子
。。。。。

论坛徽章:
0
10 [报告]
发表于 2011-01-07 11:23 |只看该作者
我认为,正则理解么问题,你就是函数用错了
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP