免费注册 查看新帖 |

Chinaunix

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

有点难!这个正则式怎么理解! [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2009-03-03 12:31 |只看该作者 |倒序浏览
import re
def hexrepl( s ):
    "Return the hex string for a decimal number"
    value = int( s.group() )
    return hex(value)

p=re.compile(r'\d+')
print p.search('Call 65490 for printing, 49152 for user code.').group(0)
print p.findall('Call 65490 for printing, 49152 for user code.')
print p.sub(hexrepl, 'Call 65490 for printing, 49152 for user code.')
>>>
65490
['65490', '49152']
Call 0xffd2 for printing, 0xc000 for user code.

问题1
上面这个函数hexrepl中s.group()
group不是只能在re中用的吗?s是个变量 他又没事先申明这个s是属于
正则式matchobject,为什么可以直接这样调用?

问题2
print p.sub(hexrepl, 'Call 65490 for printing, 49152 for user code.')
中 hexrepl是对函数的引用,但是并没有运行函数,为什么65490和49152,会以matchobject为参数来运行这个函数?

论坛徽章:
0
2 [报告]
发表于 2009-03-03 13:00 |只看该作者

回复 #1 zhenglxd 的帖子



[ 本帖最后由 zhenglxd 于 2009-3-3 13:32 编辑 ]

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

回复 #2 zhenglxd 的帖子

技术论坛请不要用类似这些用语,以避免引起其他人的反感

问题一:
》python 属于动态类型语言,任意一个变量只有在用到的时候才知道他的类型,变量不需要声明(其实为变量的引用)
例:

  1. >>> def prt(s):
  2. ...     print s
  3. ...
  4. >>> prt('abcdef')
  5. abcdef
  6. >>> prt(12345)
  7. 12345
  8. >>> prt([1, 2, 3])
  9. [1, 2, 3]
  10. >>> prt((1, 2, 3))
  11. (1, 2, 3)
  12. >>> prt({1:'a', 2:'b'})
  13. {1: 'a', 2: 'b'}
  14. >>>
复制代码

本例中,prt 函数的参数,可以为任意类型

问题二:

python HOWTO 中说:

sub(replacement, string, [count=0])

replacement can also be a function, which gives you even more control.
If replacement is a function,
the function is called for every non-overlapping occurrence of pattern.
On each call,
the function is passed a MatchObject argument for the match and can use this information
     to compute the desired replacement string and return it.

[ 本帖最后由 izhier 于 2009-3-3 14:11 编辑 ]

论坛徽章:
0
4 [报告]
发表于 2009-03-03 13:36 |只看该作者

回复 #3 izhier 的帖子

python library说
怎么搞像 莎士比亚说一样
另外我想在python内部看这个 资料我该打什么命令啊
help(sub)不对
help(re.sub)
也不对啊??
我其实就想知道
help 后打什么可以知道

论坛徽章:
0
5 [报告]
发表于 2009-03-03 13:58 |只看该作者
我是在
Regular Expression HOWTO
参考的
可以到
http://docs.python.org/howto/regex.html
http://docs.python.org/download.html
参考,和下载

论坛徽章:
0
6 [报告]
发表于 2009-03-03 14:08 |只看该作者
原帖由 zhenglxd 于 2009-3-3 13:36 发表
python library说
怎么搞像 莎士比亚说一样
另外我想在python内部看这个 资料我该打什么命令啊
help(sub)不对
help(re.sub)
也不对啊??
我其实就想知道
help 后打什么可以知道

import re
help(re.sub)
--------------------------
from re import sub
help(sub)

论坛徽章:
0
7 [报告]
发表于 2009-03-03 14:24 |只看该作者

回复 #5 izhier 的帖子

英文的啊。。。我看多了会头晕。。不过还是谢谢了。。
另外我知道
import re
help(re.sub)
版主又在灌水了!
明显他那个解释 不是help(re.sub)里面的

论坛徽章:
0
8 [报告]
发表于 2009-03-03 14:37 |只看该作者
原帖由 zhenglxd 于 2009-3-3 14:24 发表
英文的啊。。。我看多了会头晕。。不过还是谢谢了。。
另外我知道
import re
help(re.sub)
版主又在灌水了!
明显他那个解释 不是help(re.sub)里面的

我咋灌水了阿。
我看你问题要help的,就发给你了。不看英文就google翻译把,这个不算灌水?

论坛徽章:
0
9 [报告]
发表于 2009-03-03 15:26 |只看该作者

回复 #8 xiaoyu9805119 的帖子

不算灌水
我在问你个题目啊

+?什么情况下 和{1} 效果是不一样的

论坛徽章:
0
10 [报告]
发表于 2009-03-03 19:11 |只看该作者
原帖由 zhenglxd 于 2009-3-3 15:26 发表
+?什么情况下 和{1} 效果是不一样的

看看这些代码的效果

  1. >>> re.findall(r'^a.+b', s1)          #(匹配的尽可能的多)
  2. ['aabaaabbb']
  3. >>> re.findall(r'^a.+?b', s1)         #(匹配的尽可能的少)
  4. ['aab']
  5. >>>
复制代码


如果还不理解,可以参考这贴:
http://bbs.chinaunix.net/viewthread.php?tid=15825
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP