Python re

https://www.cnblogs.com/gsblog/p/3342843.html


正则表达式可以帮助我们更好的描述复制的文本格式,可以更好地利用它们对文本数据进行检索、替换、提取和修改操作。

http://www.cnblogs.com/huxi/archive/2010/07/04/1771073.html

http://docs.python.org/2.7/library/re.html#module-re

1、 re入门

第一步:先要引入有关正则表达式的包:

第二步:使用指定的正则表达式构建一个正则表达式对象,下面正则是用来搜索长度为10的a-z的英文字母

第三步:根据正则表达式指定数据中检索匹配项,如果匹配IsMatch方法就会返回true


2、三个重要的正则表达式命令

记住正则表达式最好的办法就是记住这三样东西:Bracket(括号)、caret(插入符号)、Dollars(美元符号)

B(括号)在正则表达式中有3种类型的括号:

方括号"["和花括号"{"

方括号"["内是需要匹配的字符,花括号"{"内是指定匹配字符的数量

圆括号"("则是用来分组的

C(插入符号)插入符号"^"表示正则表达式的开始

D(美元符号)美元符号"$"表示正则式的结束

3、验证

3.1 验证字符串

输入的字符在a-g之间:[a-g]

输入的字符在a-g之间并且长度为3:[a-g]{3}

输入的字符在a-g之间并且最大长度为3最小长度为1:[a-g]{1,3}

如何匹配像01234567那样的固定8位数:^[0-9]{8}$

如何验证最小长度为3最大长度为7的数字:^[0-9]{3,7}$

如何验证像LJI10201030那样的发票编号,前3个是字母剩余为8位长度的数字:^[A-Z]{3}[0-9]{8}$

不区分大小写:^[a-zA-Z]{3}[0-9]{8}$

 3.2 验证url

验证简单的网址URL格式吗?

第一步:检查是否存在www:^www.或者^[w]{3}.

第二步:域名必须是长度在1-15的英文字母:.[a-z]{1,15}

第三步:以.com或者.org结束:.(com|org)$

完整的表达式如下:

^www[.][a-z]{1,15}[.](com|org)$

3.3 验证Email

使用BCD(3条基本语法)如何验证email格式

第一步:email是长度在1-10的英文字母开头,最后跟一个“@”:

^[a-z][a-zA-Z0-9]{1,9}@$

第二步:@后面是长度在1-10的英文字母,后面跟一个".":

@[a-zA-Z]{1,10}.

第三步:最后以.com或者.org结束:

.(com|org)$

最后完整表达式:

^[a-z][a-zA-Z0-9]{1,9}@[a-zA-Z]{1,10}[.](com|org)$

 3.4 验证值在0-25的数字:

第一步:个位数[0-9]

第二步: 10-19表示[0-1][0-9]

第三步:20-25表示[0-2][0-5]

分为三组,组与组之间区分方式为小括号(,组与组之间的组合方式为|

^(([0-9])|([0-1][0-9])|([0-2][0-5]))$

 3.5 验证格式为MM/DD/YYYY,YYYY/MM/DD 和DD/MM/YYYY的日期

DD/MM/YYYY:

步骤正则表达式描述说明

先检查DD。首先DD的长度为1-29(2月份),1-30(小月),1-31(大月)

匹配[1-9]|0[1-9]

[1-9]|0[1-9]允许用户输入1-9或者01-09

再为DD添加匹配10-191[0-9]允许用户输入10-19

再为DD添加匹配20-292[0-9]允许用户输入20-29

判断30-313[0-1]允许用户输入30-31

分隔符/ . -判断[- . /]日期分割符

判断MM[1-9]|0[1-9]|1[0-2]允许用户输入1-9或者01-09以及10-12月

YYYY1[9][0-9][0-9]|2[0][0-9][0-9]允许用户输入1900-2099


4、字符串类

匹配一个电话区号码:'010-84451222 01084451222 (010)84451222'

首先是一个转义字符\(,它能出现0次或者1次?,然后是一个0,后面跟着2个数字\d{2},然后是)或者-或者空格中的一个[)- ],它出现1次或者不出现?,最后是8个数字\d{8}

完整的表达式为\(?0\d{2}[)- ]?\d{8}


5、正则表达式符

5.1 常用的元字符

 代码    说明 

 .匹配除换行符以外的任意字符 

 \w匹配字母或数字或下划线或汉字

 \s匹配任意的空白符

 \d匹配数字

 \b匹配单词的开始或结束

 ^ 匹配字符串的开始

 $ 匹配字符串的结束









5.2 常用的限定符

代码  说明

*重复零次或更多次

+重复一次或更多次

?重复零次或一次

{n}重复n次

{n,m}重复n到m次








6、分支条件

那个表达式也能匹配010)12345678或者(022-12345678这样的不正确的格式。要解决这个问题,需要用到分支条件。

正则表达式里的分支条件指的是有几种规则,如果满足其中任意一种规则都应该当成匹配,具体方法是用|把不同的规则分隔开。


 这个表达式能匹配两种连字号分隔的电话号码:一种是三位区号,8位本地号码如010-12345678,一种是4位区号,7位本地号0376-2233445

对于上个例子,更健壮的表示如下:


 7、分组

如果想要重复多个字符又该怎么办?

可以用小括号来指定子表达式(也叫做分组),然后就可以指定子表达式的重复次数。

(\d{1-3}.){3}\d{1-3}是一个简单的IP地址匹配表达式。要理解这个表达式,请按下列顺序分析:

\d{1,3}匹配1到3位的数字

(\d{1-3}.){3}匹配三位数字加上一个英文句号(这个整体也就是这个分组)重复三次

最后再加上一个一到三位的数字(\d{1,3})

IP地址中每个数字都不能大于255


正则表达式中并不提供关于数学的任何功能,所以只能使用冗长的分组,选择,字符类的描述一个正确的IP地址:


8、反义

常用的反义代码

  代码/语法    说明

\W匹配任意不是字母、数字、下划线、汉字的字符

\S匹配任意不是空白符的字符

\D匹配任意非数字的字符

\B匹配不是单词开头或结束的位置

[^x]匹配除了x以外的任意字符

[^aeiou]匹配除了aeiou这几个字母以外的任意字符







 

9、后向引用

使用小括号指定一个子表达式后,匹配这个子表达式的文本可以在表达式或者其他程序中作进一步的处理。默认情况下,每个分组会自动拥有一个组号,规则是:从左向右,以分组的左括号为标志,第一个出现的分组的组号为1,第二个为2,以此类推。

后向引用用于重复搜索前面某个分组匹配的文本。例如,\1代表分组1匹配的文本。

\b(\w+)\b\s+\1\b,可以用来匹配重复的单词,像go ,go或者kitty kitty

 这个表达式首先是一个单词,也就是单词开始处和结束处之间的多于一个的字母或数字(\b(\w+)\b),这个单词会被捕获到编号为1的分组中,然后是1个或几个空白符(\s+),最后是分组1中捕获的内容,也就是前面匹配的那个单词(\1)

 也可以自己指定子表达式的组名。要指定一个子表达式的组名,请使用这样的语法:

(?<word>\w+)或者把尖括号换成'也行:(?'Word'\w+),这样就把\w+的组名指定为Word。

 要反向引用这个分组捕获的内容,使用\k<Word>,所以上一个例子也可以写成:

\b(?<Word>\w+)\b\s+<Word>\b


常用分组语法

分类代码/语法说明

捕获(exp)匹配exp,并捕获文本到自动命名的组里

(?<name>exp)匹配exp,并捕获文本到名称为name的组里,也可以写成(?'name'exp)

(?:exp)匹配exp,不捕获匹配的文本,也不给此分组分配组号

零宽断言(?=exp)匹配exp前面的位置

(?<=exp)匹配exp后面的位置

(?!exp)匹配后面跟的不是exp的位置

(?<!exp)匹配前面不是exp的位置

注释(?#comment)用于提供注释让人阅读












10、贪婪与惰性

当正则表达式中包含能接受重复的限定符,通常的行为是匹配尽可能多的字符。以这个表达式为例:a.*b,它将匹配最长的以a开始,以b结束的字符串。如果用来搜索aabab的话,它会匹配整个字符串,称为贪婪匹配。


惰性匹配是匹配尽可能少的字符。.*?就意味着匹配任意数量的重复,但是在能使整个匹配成功的前提下使用最少的重复。

a.*?b匹配最短的,以a开始,以b结束的字符串。如果应用于aabab的话,会匹配aab和ab

懒惰限定符

代码/语法说明

*?重复任意次,但尽可能少重复

+?重复1次或更多次,但尽可能少重复

??重复0次或1次,但尽可能少重复

{n,m}?重复n到m次,但尽可能少重复

{n,}?重复n次以上,但尽可能少重复








11、Python之re

re有几个重要的函数:

*match():匹配字符串开始位置

*search():扫描字符串,找到第一个位置

*findall():找到全部匹配,以列表返回

*finditer():找到全部匹配,以迭代器返回

findall返回列表或者空列表,finditer和match、search一样返回MatchObject对象。

12、MatchObject对象

match、search、finditer返回的对象——MatchObject

*group():返回匹配的完整字符串

*start():匹配的开始位置

*end():匹配的结束位置

*spance():包含起始、结束位置的元组

*groups():返回分组信息

*groupdict():返回命名分组信息


©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,732评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 87,496评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,264评论 0 338
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,807评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,806评论 5 368
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,675评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,029评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,683评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 41,704评论 1 299
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,666评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,773评论 1 332
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,413评论 4 321
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,016评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,978评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,204评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,083评论 2 350
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,503评论 2 343

推荐阅读更多精彩内容

  • 正则表达式到底是什么东西?字符是计算机软件处理文字时最基本的单位,可能是字母,数字,标点符号,空格,换行符,汉字等...
    狮子挽歌阅读 2,134评论 0 9
  • http://www.jb51.net/tools/zhengze.html 正则表达式30分钟入门教程 版本:v...
    nullleaf阅读 582评论 0 2
  • 注:本篇文章只为方便查看,特此保留,如有冒犯,敬请谅解!!! 本文目标 30分钟内让你明白正则表达式是什么,并对它...
    阿杰Alex阅读 1,475评论 0 10
  • 今天最开心的事? 和爸爸妈妈打枕头大战 今天最有乐趣的事? 打枕头大战 今天最大的收获? 第一次使用番茄工作法,写...
    Minna明红阅读 349评论 0 0
  • 迷徒问佛:生自何来!死往何去! 佛曰:众生皆为苦,今生修来世! 可,何为苦?得不到爱的人算不算苦?找不到好的工作算...
    小尾巴VIP阅读 775评论 0 0