《python核心编程》第一章 正则表达式

论坛 期权论坛 编程之家     
选择匿名的用户   2021-6-2 20:49   1088   0

2018-6-8此系列的博文是python学习过程中对《python核心编程》一书的阅读笔记,记录下知识点和学习心得。

第一章 正则表达式

当严格讨论与字符串中模式相关的正则表达式是,常会使用到“匹配(matching)”和“搜索(searching)”两个术语。

“匹配”指的是"模式匹配(pattern-matching)",判断一个字符串能否从起始处全部或者部分地匹配某个模式,“搜索”指在字符串任意部分中搜索匹配的模式。

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

特殊符号描述示例示例意义
|管道符号,表示选择其中一个进行匹配re1| re2选择匹配正则表达式re1或者re2
.匹配除去\n之外的任意字符d.d表示匹配d与d之间为任意字符的情况,如“did”“d2d”等
^匹配字符串起始部分^my表示任何以my作为开始的字符串
$匹配字符串终止符bye$表示匹配任何以bye结束的字符串
*匹配0或者多次左端出现的正则表达式[0-9]*表示匹配以任意个数字开始的字符串
+匹配1次或者多次左端出现的正则表达式[0-9]+表示匹配以1个或者多个数字开始的字符串
匹配0次或者1次左端出现的正则表达式[0-9]?表示匹配以0个或者1个数字开始的字符串
{N}匹配N次左端出现的正则表达式[0-9]{N}匹表示配以N个数字开始的字符串
{M,N}匹配M次到N次左端出现的正则表达式[0-9]{M,N}匹表示配以M个到N个数字开始的字符串
[...]匹配来自括号中字符集的任意一个[abcd]表示匹配a或者b或者c或者d
[.-.]匹配从.到.之间的任意一个字符[a-g]表示匹配a到g之间的任意一个字符,如a或b...
[^...]不匹配此字符集中的任何一个字符[^abc]表示匹配不是字符a或b或c的任意字符
()对正则表达式进行分组或者匹配子组([0-9]{3})?表示匹配三个数字出现一次或者不出现的情况
特殊字符描述示例示例意义
\d (\D)\d匹配任何一个十进制数字,\D不匹配任何数字\d\d\d匹配三个数字的字符串
\w (\W)\w匹配任何一个字母字符,\W不匹配任何字母字符\w+匹配一个由字母字符组成的字符串
\s (\S)\s匹配任何空格字符,\S不匹配任何空格字符of\sthe匹配of和the之间有任何空格字符的情况
\b(\B)\b匹配任何单词边界,\B不匹配任何单词边界\bthe任何以the开始的字符串
\N匹配已保存的子组Nprice:\N匹配price:后面加已保存的子组N的形式
\c仅按照c的字面意思进行匹配\*匹配字符*
\A(\Z)\A匹配字符串的开始,\Z匹配字符串的结尾\Acar匹配以car开始的字符串

需要注意的是,“.”匹配除了换行符\n之外的任意字符。但是使用便已标记[S 或者 DOTALL]可以使得能够匹配任意字符。另外,要匹配“.”或者“。”需要使用转义符号“\”(反斜杠)进行转义。

匹配可以有以下集中分类:

1、匹配任意单个字符

2、从字符串起始(^)或者结尾$或者单词边界匹配(\b或者\B)。同样,要匹配字符(^和$本身)需要使用反斜杠作为转义符。

如:\bthe表示任何以the开头的字符串,\bthe\b表示匹配单词the,\Bthe表示任何包含但是不以the作为起始的字符串。

3、创建字符集

尽管句点可以用于匹配任意符号,但某些时候,可能想要匹配某些特定的字符。此时会用到方括号[ ],此正则表达式能够匹配一堆方括号中包含的任何字符。如:b[aeiu]t可以匹配bat,bet,bit,but.

注:对于单个字符的正则表达式,使用择一匹配和字符集是等效的。字符集的方法只适用于单字符的情况,包括支持匹配指定的字符范围(-)表示,如:A-Z,a-z,0-9等。

方括号左边位置加^(脱字符)符号表示不匹配给定字符集中的任何一个。如:[^aeiou]表示一个非元音字符。

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

未完明天待续……

分享到 :
0 人收藏
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

积分:3875789
帖子:775174
精华:0
期权论坛 期权论坛
发布
内容

下载期权论坛手机APP