Python Re

1. Basic

  • 参考《Python正则表达式操作指南》 
  • 模块re,perl风格的正则表达式
  • regex并不能解决所有的问题,有时候还是需要代码
  • regex基于确定性和非确定性有限自动机

2. 字符匹配(循序渐进)

 

元字符

. ^ $ * + ? { [ ] / | ( )

 

1) "[" 和 "]"常用来指定一个字符类别,所谓字符类别就是你想匹配的一个字符集。如[abc]或者[a-c]。类别中不需分隔符之类的东西

元字符在类别里并不起作用。例如,[akm$]将匹配字符"a", "k", "m", 或 "$" 中的任意一个;"$"通常用作元字符,但在字符类别里,其特性被除去,恢复成普通字符。

 

2) ^

补集。把"^"作为类别的首个字符;其它地方的"^"只会简单匹配 "^"字符本身。例如,[^5] 将匹配除 "5" 之外的任意字符。

 

3) /

很牛!

/d  匹配任何十进制数;它相当于类 [0-9]。
/D  匹配任何非数字字符;它相当于类 [^0-9]。
/s  匹配任何空白字符;它相当于类  [ /t/n/r/f/v]。
/S  匹配任何非空白字符;它相当于类 [^ /t/n/r/f/v]。
/w  匹配任何字母数字字符;它相当于类 [a-zA-Z0-9_]。
/W  匹配任何非字母数字字符;它相当于类 [^a-zA-Z0-9_]。

 

4) .

 . 匹配除了换行字符外的任何字符,在 alternate 模式(re.DOTALL)下它甚至可以匹配换行。"." 通常被用于你想匹配“任何字符”的地方。


3. 重复
1) *

匹配0~n个字符,一般不超过最大数

这种重复是“贪婪的”

作用于前一个类别或者字符。如ca*t作用于a,a[bc]*d作用于[bc]

 

2) +

匹配1~n

 

3) ?

匹配0~1

 

4) {m, n}

其中 m 和 n 是十进制整数。该限定符的意思是至少有 m 个重复,至多到 n 个重复。举个例子,a/{1,3}b 将匹配 "a/b","a//b" 和 "a///b"。它不能匹配 "ab" 因为没有斜杠,也不能匹配 "ab" ,因为有四个。

其他三个限定符都可以用这样方式来表示。 {0,} 等同于 *,{1,} 等同于 +,而{0,1}则与 ? 相同。如果可以的话,最好使用 *,+,或?。很简单因为它们更短也再容易懂。最后总能这样,有个同一的

 

 

4. 例子

1) 生成RE

import re
#RE is a string
p = re.compile('[a-z]+')
print p

 

2)使用

if p.match(''):
    print 'matched'
else:
    print 'not matched'

#results: not matched

 

3) 返回值

m = p.match('abcdef')
if m:
    print 'matched again'
else:
    print 'not matched again'
print m

#<_sre.SRE_Match object at 0x01031F38>

 

m is a object of MatchObject which contains:

  • group() 返回被 RE 匹配的字符串 
  • start() 返回匹配开始的位置 
  • end() 返回匹配结束的位置 
  • span() 返回一个元组包含匹配 (开始,结束) 的位置 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值