PYTHON核心编程(第三版)——第1部分第一章_正则表达式

1.1 简介/动机

操作文本或者数据可是件大事。

正则表达式为高级的文本模式匹配、抽取、与/或文本形式的搜索和替换功能提供了基础,它们能够匹配多个字符串

python通过标准库中的re模块来支持正则表达式。

建议这章作为入门时的字典使用,不用行去背去记住,除非是经常要用到,并且这章不太适合做读书笔记等,因为本身就不好去描述一些规则,必须使用例子去学习,也就是多看多练多用。

前面1.1是简介,1.2是关于正则表达式的规则说明,适合没有正儿八经学过正则表达式的同学看,1.3开始介绍python与正则表达式。

核心提示:

作者会通篇使用两个名词:搜索和匹配。搜索意指该字符串中任意部分搜索字符串,匹配是指从字符串开头开始,部分或全部的匹配。

作者举的例子我没能看懂,作者解释了一个正则表达式,是以字母开头的,结果匹配的却是一个数字开头的,我没有学过正则表达式,导致我很疑惑,感觉在这里讲这个正则的例子不是很合适。

你的第一个正则表达式:

这里简单讲了下正则表达式的组成和含义:包含文本和特殊字符的字符串,描述一个可以识别各种字符串的模式。作者在这里举了几个简单的例子阐述了正则表达式看起来很难,实则是比教简单的。

1.2特殊符号和字符

常见的正则表达式符号和特殊字符表

表 示 法 	描 述 	正则表达式示例
符号		
literal 	匹配文本字符串的字面值 literal 	foo
re1|re2 	匹配正则表达式 re1 或者 re2 	foo|bar
. 	匹配任何字符(除了\n 之外) 	b.b
^ 	匹配字符串起始部分 	^Dear
$ 	匹配字符串终止部分 	/bin/*sh$
* 	匹配 0 次或者多次前面出现的正则表达式 	[A-Za-z0-9]*
+ 	匹配 1 次或者多次前面出现的正则表达式 	[a-z]+\.com
? 	匹配 0 次或者 1 次前面出现的正则表达式 	goo?
{N} 	匹配 N 次前面出现的正则表达式 	[0-9]{3}
{M,N} 	匹配 M~N 次前面出现的正则表达式 	[0-9]{5,9}
[…] 	匹配来自字符集的任意单一字符 	[aeiou]
[..x-y..] 	匹配 x~y 范围中的任意单一字符 	[0-9], [A-Za-z]
[^…] 	不匹配此字符集中出现的任何一个字符,包括某一范围的字符(如果在此字符集中出现) 	[^aeiou], [^A-Za-z0-9]
(*|+|?|{})? 	用于匹配上面频繁出现/重复出现符号的非贪婪版本(*、 +、 ?、 {}) 	.*?[a-z]
(…) 	匹配封闭的正则表达式,然后另存为子组 	([0-9]{3})?,f(oo|u)bar
\d 	匹配任何十进制数字,与[0-9]一致( \D 与\d 相反,不匹配任何非数值型的数字) 	data\d+.txt
\w 	匹配任何字母数字字符,与[A-Za-z0-9_]相同( \W 与之相反) 	[A-Za-z_]\w+
\s 	匹配任何空格字符,与[\n\t\r\v\f]相同( \S 与之相反) 	of\sthe
\b 	匹配任何单词边界( \B 与之相反) 	\bThe\b
\N 	匹配已保存的子组 N(参见上面的(…)) 	price: \16
\c 	逐字匹配任何特殊字符 c(即,仅按照字面意义匹配,不匹配特殊含义) 	\., \\, \*
\A(\Z) 	匹配字符串的起始(结束)( 另见上面介绍的^和$) 	\ADear
扩展表示法		
表 示 法 	描 述 	正则表达式示例
(?iLmsux) 	在正则表达式中嵌入一个或者多个特殊“ 标记” 参数(或者通过函数/方法) 	( ?x),(? im)
(?:…) 	表示一个匹配不用保存的分组 	(?:\w+\.)*
(?P<name>…) 	像一个仅由 name 标识而不是数字 ID 标识的正则分组匹配 	(?P<data>)
(?P=name) 	在同一字符串中匹配由(?P<name)分组的之前文本 	(?P=data)
(?#…) 	表示注释,所有内容都被忽略 	(?#comment)
(?=…) 	匹配条件是如果…出现在之后的位置,而不使用输入字符串;称作正向前视断言 	(?=.com)
(?!…) 	匹配条件是如果…不出现在之后的位置,而不使用输入字符串;称作负向前视断言 	(?!.net)
(?<=…) 	匹配条件是如果…出现在之前的位置,而不使用输入字符串;称作正向后视断言 	(?<=800-)
(?<!…) 	匹配条件是如果…不出现在之前的位置,而不使用输入字符串;称作负向后视断言 	(?<!192\.168\.)
(?(id/name)Y|N ) 	如果分组所提供的 id 或者 name(名称)存在,就返回正则表达式的条件匹配 Y,如
果不存在,就返回 N; |N 是可选项	(?(1)y|x)
————————————————
版权声明:本文为CSDN博主「田园诗人之园」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/u014100559/article/details/87087046

1.2.1使用择一匹配符号匹配多个正则表达式

择一匹配的管道符号(|):表示从多个模式中选择其中一个的操作,用来分隔不同的正则表达式。择一匹配被称作并或者逻辑或。

1.2.2匹配任意单个字符

使用点号匹配任意单个字符。使用反斜线转义可以匹配点号。

1.2.3从字符串起始或者结尾或者单词边界匹配

用于指定要匹配字符串的位置的特殊字符

指定字符串的起始位置:脱字符(^)特殊字符(\A)

指定字符串的末尾位置:美元符号($)或者(\Z)

指定字符串的边界位置:\b匹配起始位置,用\bthe\b就可以只匹配the,\B匹配不起始位置

1.2.4创建字符集

[]方括号:用于匹配某些特定字符中的一个。逻辑或的功能。

1.2.5限定范围和否定

-和^的应用,-是可以指定字符的范围,^表示不匹配

1.2.6使用闭包操作符实现存在性和频数匹配

介绍特殊符号:* + ?{}

1.2.7表示字符集的特殊字符

介绍特殊字符:d \s \w

1.2.8使用圆括号指定分组

介绍圆括号的作用:1.对正则表达式进行分组,2.匹配子组。重点内容,要记下。

1.2.9扩展表示法

介绍(?...)

以上为正则表达式的语法介绍,感觉正则表达式很难用语言去形容具体的规则,具体还是要看具体例子才容易懂。

以下为这章的重点。

1.3正则表达式和python语言

介绍正则表达式和python的历史相关,不重要,只是想引出下面想讲的re模块。

1.3.1re模块:核心函数和方法

放了一张re函数表,眼熟下就行。

核心提示:编译正则表达式(编译还是不编译)

编译成对象之后执行的更快。作者强烈建议正则表达式预编译。

1.3.2使用compile()函数编译正则表达式

首先是预编译不是强制性的,其次是预编译和没有预编译的方法是一样的。

1.3.3匹配对象以及group()和groups()方法

group()返回的是整个匹配对象或者按照要求返回特定子组;groups()返回的是一个唯一或者全部子组的元组。

1.3.4使用match()方法匹配字符串

match():试图从字符串的起始部分对模式进行匹配;成功返回匹配对象,失败返回none;使用group()可以输出当前对象;

要注意的是none没有match()方法,所以如果直接对输出的结果不用if直接用.group(),会抛出异常。

1.3.5使用search()在一个字符串中查找模式(搜索与匹配的对比)

match从字符串的起始部分就开始匹配,但是很多种情况是在字符串的中间部分才能匹配上,就用到了search方法。

search方法与match唯一的区别就是匹配的位置不同(match开头,search任意位置),工作方式完全一致,可以看成孪生兄弟方法。

以下直接为正则表达式如何运用在python程序中,建议大家多多练习书中的例子,读完这个我发现我表达能力真的有限(:俺也一样)

1.3.6匹配多个字符串

正则表达式中符号(|)如何用在python语句中

写好正则表达式直接用上面讲的match和search方法即可。

1.3.7匹配任何单个字符

正则表达式中符号(.)如何用在python语句中

同上

1.3.8创建字符集([])

正则表达式中符号([])如何用在python语句中

同上

1.3.9重复、特殊字符以及分组

 

目前工作暂时用不到过多的正则表达式,暂时不再阅读。(与其说是正则表达式用的少,倒不如说是对字符串处理用的比较多)

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值