对正则表达式的基础学习(语言:基于Python)

正则表达式三要素

正则表达式有三种元素需要提及,分别是:字符量词位置

[0-9]{4}$

这一串正则表达式的意思是要匹配出现在行尾的四个数字。

[0-9]	#表示需要匹配的是数字
{4}		#表示需要匹配的是四个字符
$		#表示需要匹配的字符出现在行尾

三要素之一:字符

正则表达式中的字符
字符含义描述
.代表一个字符的通配集除了换行符外的任何字符
[ ]字符集和[ ]内部的任何字符匹配,默认为一个字符。里面可以是字符的集合,也可以是字符的范围。比如:[abc]、[a-z]、[0-9]。
[^]排斥性字符集表示与字符集之内的其他任一字符相匹配。比如:[^0-9]表示的是非数字
\转义符特殊符号需要转义,还有其他\n、\f、\r、\t、\v。
\d表示数字等价于[0-9]
\D表示非数字等价于[^0-9]
\w字母、数字、下划线包含汉字字符
\W非字母、非数字、非下划线等价于[^\w]
\s空白字符等价于[\n\f\r\t\v]
\S非空白字符等价于[^\s]
字符举例和解释

举例在下面的例子当中会有。

三要素之二:量词

正则表达式中的量词
量词字符含义描述
{n,m}n个到m个
{n}n个
*零个或多个相当于{0,}
+一个或多个相当于{1,}
?零个或一个相当于{0,1}
*?零个或多个,非贪婪相当于{0,},非贪婪
+?一个或多个,非贪婪相当于{1,},非贪婪
量词举例和解释

* 、+ 、?是在贪婪模式下进行匹配;
*? 、+? 是非贪婪模式下进行匹配。
(下面的例子对贪婪模式和非贪婪模式作了简单解释和举例)
比如:字符串为 “ab123cd” ,那么 [0-9]+ 表示的是尽量找数字,那么找到的数字会是 “123” (贪婪模式); [0-9]+? 表示的是找到数字就好,尽量少地进行匹配,那么它会找到的是 “1” (非贪婪模式)。
如果用一个较复杂而且可以直观参考用法的简单例子的话,可以参考字符串为“<div>abcdef</div>”,那么要是使用<.>的话会匹配到“<div>abcdef</div>”;而使用<.?>匹配到的结果是
"<div>"和“</div>”。

三要素之三:位置

正则表达式中的位置

一些表达式元素可以限定字符所出现的位置

位置字符含义描述
^起始位置^[0-9]表示位于行开头的第一个数字
$结束位置.$表示匹配结尾处的点(\是转义符)
\b单词边界(单词首或尾)\bclass 表示匹配 class,但是不匹配subclass
\B非单词边界
\A整个文本起始位置
\Z整个文本结束位置
位置举例和解释

比如:
(1) \s+$ 表示结尾处的一个或者多个空白。
(2) ^[a-z0-9.@]+$ 表示要匹配的是从开始到结束中间只有数字,字母,点和”@“符号。

三要素之外一:分组

正则表达式中的分组
字符含义描述
|或者或关系的逻辑选择,可与组结合使用
( )分组按照子表达式进行分组
(?P<name>……)对组进行命名命名后方便指定哪一个组
\数字引用某一分组\1表示第1组,\2表示第2组
(?P=name)引用某个命名的组按名字引用
分组举例和解释

比如:
(1) [a-z]+|h[1-6] 表示的是字母组成的单词或者h1,h2……h6。
(2) ([0-9]{4})-(1?[0-9])-([1-3]?[0-9]) 表示的是年月日的正则表达式。每个括号对印了一个分组。分组称为group。group(0)代指匹配到的所有字符。group(1),group(2),group(3)分别对印了匹配到的从左到右圆括号里面的内容。
(3) (?P<year>[0-9]{4})-(?P<month>1?[0-9])-(?P<day>[1-3]?[0-9]) 表达式匹配的内容和上面的例子(2)一样。但是在表达式中增加了对命名进行分组的一个操作。当这个正则表达式用来匹配 2021-5-9 的时候,group(0) 匹配到的是全部:2021-5-9;group(“year”) 匹配到的是:2021;group(“month”) 匹配到的是:5;group(“day”) 匹配到的是:9。

三要素之外二:引用

正则表达式中的引用

在正则表达式中如果要引用某一组的话可以用 \1, \2 的方法来进行引用。其中前面是一个斜杠 “”,后面是分组的数字。同时也可以利用引用命名的方法进行引用

分组举例和解释

首先,解释用含有分组数字的方法进行引用的引用方法。有两个待匹配的字符串:“<h1>ab123cd</h1>”,“<h1>ab123cd</h2>”。如果用 <(h[1-6])>.?</(h[1-6])> 那么可以匹配到的是两个字符串。但是如果用 <(h[1-6]>.*?</\1> 可以直接匹配到第一个字符串。
其次,解释使用分组命名来进行引用的引用方法。例子依然是上面的两条字符串。我们如果只想匹配到第一条字符串 <h1>ab123cd</h1> 的话,我可以这么写正则表达式:<(?P<name>h[1-6]>.*?</(?P=name)>。

结束

至此,我们简单学习了正则表达式的构成,具体的正则表达式的书写需要大家自己进行练习和操作。

参考书籍

1、《Python程序设计》—唐大仕 编著—电子工业出版社

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值