DAY10 python学习 正则表达式(1)

正则表达式(1)

一.基本概念

1.概念:

正则表达式(Regular Expression,简称为regex)是由字符和特殊符号组成的字符串,该字符串描述一个可以识别各种字符串的模式,于是正则表达式能按照某种模式匹配一系列有相似特征的字符串(即匹配多个字符串)。
Python 通过标准库中的 re 模块来支持正则表达式。
 

2.正则表达式字母表:

对于通用文本,用于正则表达式的字母表是所有大小写字母及数字的集合。可能也存在一些特殊字母;例如,指仅包含字符“0”和“1”的字母表。该字母表可以表示所有二进制字符串的集合,即“0”、“1”、“00”、“01”、“10”、“11”、“100”等。

例如:

正则表达式模式 匹配的字符串
Python Python

该正则表达式模式是“Python”。该模式没有使用任何特殊符号去匹配其他符号,
而只匹配所描述的内容,所以,能够匹配这个模式的只有包含“Python”的字符串。正则表达式的强大之处在于引入特殊字符来定义字符集、匹配子组和重复模式。正是由于这些特殊符号,使得正则表达式可以匹配字符串集合,而不仅仅只是某单个字符串。
 

3.特殊符号和字符

下表是常用正则表达式符号和特殊字符:
常见正则表达式符号和特殊字符表
在这里插入图片描述
在这里插入图片描述

(1)使用择一匹配符号匹配多个正则表达式模式

择一匹配符号:“ | ”(即键盘上的竖线),表示一个“从多个模式中选择其一”的操作,用于分割不同的正则表达式。择一匹配有时候也称作并(union)或者逻辑或(logical OR)。
例如:

正则表达式模式 匹配的字符串
a|b a,b
(2)匹配任意单个字符

任意匹配字符:点号或者句点“ . ”,匹配除了换行符\n 以外的任何一个字符。(Python 正则表达式有一个编译标记[S 或者DOTALL],该标记能够推翻这个限制,使点号能够匹配换行符)。
例如:

正则表达式模式 匹配的字符串
s.b 匹配在字符“s”和字符“b”之间的任意一个字符,例如sab,sbb
。。(其实是两个英文句点,但打两个句点死活显示三个!!) 任意两个字符
.gg 匹配在字符串gg之前的任意一个字符,例如egg

注意:如要匹配句点(dot)或者句号(period)字符,必须使用反斜线转义句点符号的功能,例如“.”。
 

(3)定位符
字符 描述
^,\A 匹配输入字符串开始的位置。后者主要用于那些没有脱字符的键盘。
$,\Z 匹配输入字符串结尾的位置。
\b 匹配一个单词边界,即字与空格间的位置
\B 非单词边界匹配。

例如:

正则表达式模式 匹配的字符串
subject 任何包含subject的字符串
^begin 匹配所有以begin开头的字符串
end$ 匹配所有以end结尾的字符串
^subject$ 任何由单独的字符串subject构成的字符串,如subjectsubject
\ban 匹配任意以an开头的单词,例如匹配单词angle中的字符串an
gle\b 匹配任意以gle结尾的单词,例如匹配单词angle中的字符串gle
\Bed 匹配单词appered,但是不匹配单词edge

注意:
(1)\b 字符的位置是非常重要的。如果它位于要匹配的字符串的开始,它在单词的开始处查找匹配项。如果它位于字符串的结尾,它在单词的结尾处查找匹配项。
(2)对于 \B 非单词边界运算符,位置并不重要,因为匹配不关心究竟是单词的开头还是结尾。
 

(4)创建字符集

使用方括号“ [ ] ”匹配某些特定的字符,方括号有表达逻辑或的功能,ru [abc]表达a或b或c。可通过该字符创建一个字符集
例如:

正则表达式模式 匹配的字符串
b[aeiu]t bat,bet,bit,but
[rd][ek][ds] 一个包含四个字符的字符串,第一是“r”或“d”,二是“e”或“k”,三是“d”或“s”,例如red,dks。
(5)限定范围和否定

方括号中两个符号中间用连字符“ - ”连接,用于指定一个字符的范围;例如,A-Z、a-z 或者0-9 分别用于表示大写字母、小写字母和数值数字。
如果脱字符“ ^ ”紧跟在左方括号后面,这个符号就表示不匹配给定字符集中的任何一个字符。
例如:

正则表达式模式 匹配的字符串
[A-Z][0-9] 匹配满足第一个字符为大写A到Z中任意一个字符,第二个字符为0到9中任意一个字符
[^aeiou] 一个不是不是元音字母的字符
(6)使用闭包操作符实现存在性和频数匹配
字符 描述
* 匹配前面的子表达式出现零次或多次。要匹配 * 字符,请使用 *。
+ 匹配前面的子表达式一次或多次。要匹配 + 字符,请使用 +。
匹配前面的子表达式零次或一次,或指明一个非贪婪限定符。要匹配 ? 字符,使用 ?。
{N},{N,M} 里面或者是单个值或者是一对由逗号分隔的值,用于精确匹配前面的表达式N次,或者N~M次

例如:

正则表达式模式 匹配的字符串
[nm]o? 匹配n,no,m,mo
[nm]o* 匹配第一个字符为n或m,接下来为若干个o,也可以没有o
[nm]o+ 匹配第一个字符为n或m,接下来为若干个o,至少一个o
[0-9]{12,16} 匹配12 至16 个数字
(7)表示字符集的特殊字符
字符 描述
\d 匹配一个数字字符。等价于 [0-9]。
\D 匹配一个非数字字符。等价于 [^0-9]。
\w 匹配字母、数字、下划线。等价于’[A-Za-z0-9_]’。
\W 匹配非字母、数字、下划线。等价于 ‘[^A-Za-z0-9_]’。
\s 匹配任何空白字符,包括空格、制表符、换页符等等。等价于 [ \f\n\r\t\v]。
\S 匹配任何非空白字符。等价于 [^ \f\n\r\t\v]。

例如:

正则表达式模式 匹配的字符串
\w+\d 首先是一串由字母、数字、下划线组成的字符串,最后是一个数字。
(8)使用圆括号指定分组

当使用正则表达式时,一对圆括号可以实现以下任意一个(或者两个)功能:
• 对正则表达式进行分组;
• 匹配子组。
例如:

正则表达式模式 匹配的字符串
\d+(.\d*)? 表示简单浮点数的字符串;即任何十进制数字,后面可以接一个小数点和零个或者多个十进制数字,例如“0.004”、“2”、“75.”等。
(9)扩展表示法

用于实现一个前视(或者后视)匹配,或者条件检查

字符 描述
(pattern) 匹配 pattern 并获取这一匹配。所获取的匹配可以从产生的 Matches 集合得到。要匹配圆括号字符,请使用 ‘(’ 或 ‘)’。
(?:pattern) 匹配 pattern 但不获取匹配结果,也就是说这是一个非获取匹配,不进行存储供以后使用。这在使用 “或” 字符 (
(?=pattern) 正向肯定预查(look ahead positive assert),在任何匹配pattern的字符串开始处匹配查找字符串。这是一个非获取匹配,也就是说,该匹配不需要获取供以后使用。
(?!pattern) 正向否定预查(negative assert),在任何不匹配pattern的字符串开始处匹配查找字符串。这是一个非获取匹配,也就是说,该匹配不需要获取供以后使用。
(?<=pattern) 反向(look behind)肯定预查,与正向肯定预查类似,只是方向相反。
(?<!pattern) 反向否定预查,与正向否定预查类似,只是方向相反。
(?#patterm) 表示注释,所有内容都被忽略

例如:

正则表达式模式 匹配的字符串
(?:.com) 匹配但最后不获取以.com结尾的字符穿
(?=.com) 如果一个字符串后面跟着.com才进行匹配
(?!.com) 如果一个字符串后面不是跟着.com才进行匹配
(?<=www) 如果一个字符串之前是www才进行匹配)
(?<!www) 如果一个字符串之前不是www才进行匹配
发布了11 篇原创文章 · 获赞 0 · 访问量 216

猜你喜欢

转载自blog.csdn.net/yuluotianjin/article/details/104286133