Python正则表达式

loworth 2009-08-10 05:17:12
+和*应该是是一个匹配1或多次 一个匹配 0或多次吧? 还有其他区别么
我的理解是下面代码中两个的结果应该一样
但2.6.2中,事实却是 第一句可以正确找到位置,第二句找不到

新学Python两天, 请教各位
#!/usr/bin/env python
# -*- coding: utf-8 -*-

import re

print re.search('[ef]+', 'abcdefg').span()
print re.search('[ef]*', 'abcdefg').span()


结果是

(4, 6)
(0, 0)

何故??
...全文
103 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
loworth 2009-08-11
  • 打赏
  • 举报
回复
谢谢各位 理解上了一个层次
DarkChampion 2009-08-11
  • 打赏
  • 举报
回复
应该是这样
loworth 2009-08-11
  • 打赏
  • 举报
回复
返回
(0, 0)
的意思是不是是说在0位置到0位置之间匹配到了一个 0个的 [ef]
gift_lbs 2009-08-11
  • 打赏
  • 举报
回复
search( pattern, string[, flags])

Scan through string looking for a location where the regular expression pattern produces a match, and return a corresponding MatchObject instance.
lioujian47 2009-08-10
  • 打赏
  • 举报
回复
lz
这个是正常的,你用的是search!
search就意味只返回一个!
[ef]+ 匹配的只有一个
[ef]* 匹配有多个,而第一个就是(0,0)!



for i in re.finditer('[ef]*', 'abcdefg'):
print i.span()

for i in re.finditer('[ef]+', 'abcdefg'):
print i.span()



对比一下就知道了.
DarkChampion 2009-08-10
  • 打赏
  • 举报
回复
这样更清楚一点
import re
print re.search('d[ef]+', 'adbcdefg').span()
print re.search('d[ef]*', 'adbcdefg').span()

结果:
(4, 7)
(1, 2)
DarkChampion 2009-08-10
  • 打赏
  • 举报
回复
我对正则表达式不太熟,个人理解*可以表示空
import re
print re.search('d[ef]+', 'abcdefg').span()
print re.search('d[ef]*', 'abcdefg').span()
Semigod 2009-08-10
  • 打赏
  • 举报
回复
我对正则的理解就应该是一样的结果。
loworth 2009-08-10
  • 打赏
  • 举报
回复
啊?? 这个应该是一样的结果么?
Semigod 2009-08-10
  • 打赏
  • 举报
回复
似乎你发现了一个 bug.我试了一下,确实不行。

37,721

社区成员

发帖
与我相关
我的任务
社区描述
JavaScript,VBScript,AngleScript,ActionScript,Shell,Perl,Ruby,Lua,Tcl,Scala,MaxScript 等脚本语言交流。
社区管理员
  • 脚本语言(Perl/Python)社区
  • IT.BOB
加入社区
  • 近7日
  • 近30日
  • 至今

试试用AI创作助手写篇文章吧