Python中的正则表达式1

Python中的正则表达式

《Python核心编程》 by Wesley J. Chun

Chapter 15 正则表达式

推荐读物《精通正则表达式》(Mastering Regular Expressions) by Jeffrey E. F. Friedl

Python通过标准库的re模块支持正则表达式Regulation Expression

Search:在字符串任意部分中搜索匹配的模式

Match:判断一个字符串能否从起始处全部或部分的匹配某个模式

正则表达式匹配的是字符串的集合而不只是一个字符串,否则就没有意义了。

常用的原字符(metacharacter)




特殊字符

记号

说明

样例

\d

匹配任何数字,和[0-9]一样(\D:任何非数符字)

data\d+.txt

\w

匹配任何数字字母字符,和[A-Za-z0-9_]相同 \W是反义

[A-Za-z0-9_]\w+

\s

匹配任何空白字符,和[\n\t\r\v\f]相同,\S是反义

Of\sthe

\b

匹配单词边界 \B是反义

\bThe\b

\nn

匹配已保存的子组

Price:\16

\c

逐一匹配特殊字符c(即取消它的特殊含义,按字面匹配)

\.,\\,\*

\A(\Z)

匹配字符串的起始(结束)和^$作用一样

\ADear


举例

.. 匹配任意两个字符 .end 匹配在end前的任意一个字符

^即caret,脱字符号 ^from 匹配任何以from开始的字符串 同理有$

\b匹配一个单词边界,与之对应的模式一定在一个单词的开头,不论这个单词前面是有字符还是没有字符。\B 只匹配出现在一个单词中间的模式(即,不在单词边界上的字符)

The 任何包含有“The”的字符串

\bThe 任何以The开始的字符串

\bThe\b 仅匹配单词The

\Bthe 任意包含the但不以the开头的单词

*匹配它左边那个正则表达式出现0次或0次以上的情况(在编译原理里,此操作符被叫做Kleene闭包操作符)

+匹配它左边那个正则表达式出现1次或1次以上的情况(此操作符被叫做正闭包操作符)

?匹配它左边那个正则表达式出现0次或1次以上的情况

{N}匹配N次出现;{M,N}匹配M次到N次出现

当使用了表示重复的原字符(*+?{m,n})时,正则表达式会在匹配模式时,尽量吸收更多的字符。问号告诉正则表达式引擎尽可能的偷懒,要求当前匹配消耗的字符越少越好,留下尽可能多的字符给后面的模式。

[dn]ot? 匹配do no dot not

0?[1-9] 1-9中的任意一个数字,前面可能有一个0

[0-9]{15,16} 15或16位的数字,如信用卡号码

</?[^>]+> 匹配所有合法(和无效的)HTML标签的字符串

[KQRBNP][a-h][1-8]-[a-h][1-8] 在“长代数”记普法中,表示国际象棋合法的棋盘移动

\w+-\d+ 一个由字母或数字组成的字符串和至少一个数字,两部分用-连接

\d{d}-\d{3}-\d{4} 匹配一个电话号码如800-555-1212

\w+@\w+\.com 匹配xxx@xxx.com

要想匹配xx@host.yyy.com就要修改为\w+@(\w+\.)?\w+\.com其中(\w+\.)?表示主机名host部分是可选出现的。如果?改为*则表示允许有0个或多个主机名在域名yyy.com之前

() 在匹配成功时取出某个特定的字符串或子字符串。可以对正则表达式进行分组,还可以用来匹配子组。例如“\w+-\d+”匹配了一些内容,此时想把第一部分的字符和第二部分的数字分别保存,就可以用(\w+)-(\d+),然后对这两个匹配的子组分别进行访问了。用group(1),group(2)…

\d+(\.\d*)? 表示简单的浮点型数字。后面跟一个可选的小数点然后再接0个或多个十进制数字0.04或4

#! /usr/bin/env python
#coding=utf-8
import re

data='Thu Oct 22 21:13:23 1998::gjivgb@axplhnbsqtkq.com::909062003-6-12'

patt = '.+?(\d+-\d+-\d+)' #.#用来匹配前面的任意多个字符,()用来获取我们需要的那部分数据
print re.match(patt,data).group(1) #

patt2 = '-(\d+)-'
m = re.search(patt2, data)
print m.group() #-6-
print m.group(1) #6 取得子组

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值