python正则表达式保姆级教程,另附re模块详细教程

正则表达式与re模块

本文参考了很多书籍资料,整合而成,颇为齐全,如有不足,还请指出,谢谢。

一、正则表达式简介

1.1 正则表达式的内容与用处

在处理字符串时,经常会有查找某些复杂规则的字符串需求。正则表达式就是用于描述这类规则的工具。

正则表达式是字符串的某些复杂规则,是记录文本规则的代码。

简而言之,正则表达式就是用来找东西的,就是用来找你所需要的字符串的工具。
如果你仍然一头雾水,请接着往下看,慢慢你就懂了。

二、正则表达式基础

P.S. 本部分仅仅是介绍正则表达式,如果要应用至Python,还需加引号等,详情见下文

2.1 行定位符

行定位符就是用来描述子串 (串中任意个连续的字符组成的子序列称为该串的子串) 的边界。

顺便说明一下字符串、子串和子序列的区别:
字符串:Anonymous
字串是在字符串中,取出一块(连续的),如:Ano,onym,ou,等
子序列指的是从字符串中,顺序取出字符,但是可以不连续:如:Ays,Anon,ys等

行定位符只有两个

^ 表示行的开始
$ 表示行的结尾

举个例子

^tm

可以与 ‘tm Knight’ 或 ‘tm knight’ 等以tm开头的子串匹配。
但是 ‘atm’ 或 ‘Knight tm’ 则不会被匹配

$tm

则与 ‘Knight tm’ 等以tm结尾的子串匹配,而 ‘tm aaa’ 则不会被匹配。

如果希望要匹配的子串可以出现在字符串的任意部分,那么可以直接写成

tm

这样就可以与 ‘tm Knight’ 或 ‘tm knight’ 或 ‘Knight tm’ 等子串匹配了。

2.2 元字符

元字符较多,话不多说,先上表格。

代码 说明
. 匹配除换行符以外的任意字符
\w 匹配字母、数字、下划线或汉字
\W 匹配除字母、数字、下划线或汉字以外的字符
\s 匹配单个的空白符(包括Tab键和换行符)
\S 匹配除单个的空白符(包括Tab键和换行符)以外的所有字符
\d 匹配单个数字
\D 匹配单个非数字字符
\b 匹配单词的开始或结束,单词的分界符通常是空格、标点符号或者换行
^ 匹配行的开始
$ 匹配行的结束
\A 仅匹配字符串的开头
\Z 及匹配字符串的结尾

其中,^与$既是行定位符,又是元字符。

注意:^与\A,$与\Z,不完全一样,后续讲到re模块时会详细说明。

由于元字符数量较多,暂时不一一举例,后面的代码示例中会包含元字符。

2.3 限定符

如果你想要匹配特定数量的字符,就需要限定符的帮助。
上表!

限定符 说明 举例 可匹配的字符串
匹配前面的字符零次或一次 colou?r colour或color
+ 匹配前面的字符一次或多次 go+gle 从gogle到goo…ogle
* 匹配前面的字符零次、一次或多次 go*gle 从ggle到goo…ogle
{n} 匹配前面的字符n次 go{2}gle google
{n,} 匹配前面的字符最少n次 go{2,}gle 从google到goo…ogle
{n,m} 匹配前面的字符最少n次,最多m次 employe{0,2} employ或employe或employee

温馨提示:注意限定符限定的是前一个字符的次数。

2.4 字符类

正则表达式查找数字和字母是很简单的,因为已经有了对应这些字符集合的元字符(如, \d , \w 等),但是如果要匹配没有预定义的字符集合,就需要用到法宝——" [ ] " (方括号)
如想匹配a,e,i,o,u,就直接输入

[aeiou] #不要加逗号!!!

再比如

[.?!] #匹配“.”,“?”,“!”
[0-9] #相当于\d,匹配单个数字
[a-zA-Z] #匹配单个英文字符

2.5 排除字符

如果想表示不匹配某个子串的意思,我们就要用到正则表达式里的排除字符——^(没错,仍然是这个符号)
但是我们的语法结构不同了——

[^a-zA-Z] 
#使用时放在方括号里,表示匹配时排除方括号内所有字符
#在本例中,该表达式会匹配一个不是字母的字符

2.6 选择字符

如果在表达式中想匹配有多重可能性的字符,就可以用到选择字符——“|”
语法格式为,放于两个子串之间,表示匹配a子串或b子串。
稍后会与2.7一起有小练手讲解,详见下文。

2.7 小括号

在正则表达式中,如果想改变限定符(如 “|” “^” “*” 等)的作用范围对某些字符组成的子串进行分组,就需要用到小括号。

举个例子

(six|four)th #匹配sixth或fourth
six|fourth #匹配six或fourth

(\d{
   0,3}[a-z]){
   3} #是对括号内部分进行重复操作
#结果等同于\d{0,3}[a-z]\d{0,3}[a-z]\d{0,3}[a-z]
\d{
   0,3}[a-z]{
   3} 
#结果等同于\d{0,3}[a-z][a-z][a-z]

小练手
要匹配身份证号(18位)的表达式(不区分大小写):
先自己试试吧!(答案在2.9后)

2.8 转义字符

正则表达式的转义字符,与python中的大同小异,都是将特殊字符变为普通字符,所以这里不过多赘述了。

举个例子
要匹配IP

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值