免费注册 查看新帖 |

Chinaunix

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

python中的正则 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2011-02-10 10:26 |只看该作者 |倒序浏览
本帖最后由 中关村村草 于 2011-02-10 10:28 编辑

转:blue_halo

python中的正则


概括:

python使用re正则模块来实现正则表达式,import re。

元字符含义:

一、字符串里含有什么字符

1、首先确定一下元字符(不是代表字面意思的字符)有哪些。

\          代表转义

|          代表分支选择

( )        代表捕捉

[ ]        代表字符数组

] 比较特殊,只有前面有相应的[ 和 { 时,才会是元字符,否则就是普通字符 。()没有使用此规则

^  $      #行首,行尾

* + ?    #代表数量

.            #代表任意字符

2、单个字符的描述

除了在上面提到的元字符,想要匹配什么字符直接写就可以了,例如'a' 匹配 正则表达式 a。

而要想匹配元字符本身只需要在前面加上转义字符(\)就可以了。


3、非打印字符及某类字符 的表示

非打印字符和标准的基本一直,列举如下:

\d         匹配任何数字,等同于[0-9],注意这里的-只有在字符数组里才是元字符 。

\D         匹配任何非数字,等同于[^0-9]。

\s        匹配任何空白字符,等同于[\f\t\n\r ]

\S        匹配任何非空白字符,等同于[^\f\t\n\r ]

\t         匹配tab

\w       匹配任何字母数字或者下划线

\W      匹配上面以外的

二、字符串的位置

1、基本位置描述符

^    匹配字符串的起始位置

\A   匹配字符串的起始位置

$    匹配字符串结束位置。

\Z   匹配字符串的结束位置。

\b   匹配单词边界。

(?#) 注释

(?=) 匹配一个正则位置

(?!)  不匹配一个正则位置

三、字符串里字符的数量

*  0次或者多次 (尽可能的多匹配)

?  0次或者1次  (尽可能的多匹配)

+ 1次或者多次 (尽可能的多匹配)

{n} n次

{m,n} m次到n次

{m,} m次以上     注意 {,n}是错误的写法。

在以上的数量修饰符的最后再加一个?就是尽可能的少匹配。  

四、举例

Python代码
  1. import re

  2. if re.match(r"\d+","a99b"): #match必须是从头匹配
  3.         print "match ok!"

  4. if re.search(r"\d+","a99b"):
  5.         print "search ok!"

  6. print re.search(r"\d+","a99b").group() #group返回匹配的字符串
  7. print re.search(r"(\d+)(\w)","a99b98c").groups() #返回子组字符串
  8. print re.findall(r"\d+","a99b88c") #findall直接返回匹配的字符串列表  
复制代码
五、附加选项

Python代码
  1. import re   
  2.   
  3. if re.match(r"a","A"):   
  4.     print "test1 ok"  
  5.   
  6. if re.match(r"(?i)a","A"): #附加选项必须在正则表达式最前面(?i)代表忽略大小写,对应re.I   
  7.     print "test2 ok"  
  8.   
  9. #ma=re.compile("a",re.I)   
  10. #if ma.match("A"):   
  11. #   print "good!"   
  12.   
  13. if re.search(r"^\d","abcd\n1234"): #\A,\Z只匹配字符串的开头和结尾,不受(?m)的影响   
  14.     print "test3 ok"  
  15.   
  16. if re.search(r"(?m)^\d","abcd\n1234"): #每一行的开头和结尾都认为是字符串的开始和结尾,对应re.M   
  17.     print "test4 ok"  
  18.   
  19. print re.search(r".+","abcd\nefg").group() #输出abcd   
  20. print re.search(r"(?s).+","abcd\nefg").group() #输出abcd\nefg,对应re.S   
  21.   
  22. if re.match(r"\w","我"):   
  23.     print "test5 ok"  
  24.   
  25. if re.match(r"(?u)\w","我"): #匹配unicode,对应re.U   
  26.     print "test6 ok"  
  27.   
  28. #(?x),re.X 对应可以在正则中插入空白符   
  29. #(?L),re.L 对应\w等匹配本地字符集  
复制代码

论坛徽章:
0
2 [报告]
发表于 2011-02-10 10:52 |只看该作者
不错,基础总结得不错。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP