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}是错误的写法。

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

四、举例

import re  
  
if re.match(r"\d+","a99b"): #match必须是从头匹配  
    print "match ok!"  
  
if re.search(r"\d+","a99b"):  
    print "search ok!"  
  
print re.search(r"\d+","a99b").group() #group返回匹配的字符串  
print re.search(r"(\d+)(\w)","a99b98c").groups() #返回子组字符串  
print re.findall(r"\d+","a99b88c") #findall直接返回匹配的字符串列表  
print re.sub(r"\d+","num","a99b88c") #把99 和 88 都替换成num  

五、附加选项

import re  
  
if re.match(r"a","A"):  
    print "test1 ok"  
  
if re.match(r"(?i)a","A"): #附加选项必须在正则表达式最前面(?i)代表忽略大小写,对应re.I  
    print "test2 ok"  
  
#ma=re.compile("a",re.I)  
#if ma.match("A"):  
#   print "good!"  
  
if re.search(r"^\d","abcd\n1234"): #\A,\Z只匹配字符串的开头和结尾,不受(?m)的影响  
    print "test3 ok"  
  
if re.search(r"(?m)^\d","abcd\n1234"): #每一行的开头和结尾都认为是字符串的开始和结尾,对应re.M  
    print "test4 ok"  
  
print re.search(r".+","abcd\nefg").group() #输出abcd  
print re.search(r"(?s).+","abcd\nefg").group() #输出abcd\nefg,对应re.S  
  
if re.match(r"\w","我"):  
    print "test5 ok"  
  
if re.match(r"(?u)\w","我"): #匹配unicode,对应re.U  
    print "test6 ok"  
  
#(?x),re.X 对应可以在正则中插入空白符  
#(?L),re.L 对应\w等匹配本地字符集  



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值