35 正则表达式语法


在处理字符串时,经常会有查找符合某些复杂规则的字符串的需求。正则表达式就是用于描述这些规则的工具。换句话说,正则表达式就是记录文本规则的代码。

行定位符

行定位符就是用来描述字符串的边界,“^”表示行的开始,“$”表示行的结尾。

^tm

该表达式表示要匹配字符串tm的开始位置是行头,如“tm equal Tomorrow Moon”可以匹配,而 “Tomorrow Moon equal tm”则不匹配。

tm$

tm equal Tomorrow Moon”不可以匹配,而 “Tomorrow Moon equal tm”则可以匹配。

如果要匹配的字符串可以出现在字符串的任意部分,那么可以直接写成下面的格式

tm

则“tm equal Tomorrow Moon”和“Tomorrow Moon equal tm”都可以匹配。

元字符

除了前面介绍的元字符“^”和“$”外,正则表达式里还有更多的元字符,例如下面的正则表达式中就应用了元字符“\b”和“\w”。

\blz\w*\b

上面的正则表达式用于匹配以字母lz开头的单词,先从某个单词开始处(\b),然后匹配字母lz,接着是任意数量的字母或数字 (\w*),最后单词结束处(\b)。该表达式可以匹配“lzsoft”“\nlz”和“lz123456”等,但不能与“alz”匹配。
在这里插入图片描述

限定符

如果想匹配特定数量的数字,可以限定符(指定数量的字符)来实现该功能。如匹配8QQ号可用如下表达式:

^\d{8}$

在这里插入图片描述

字符类

正则表达式查找数字和字母是很简单的,因为已经有了对应这些字符集合的元字符(如“\d”“\w”),但是如果要匹配没有预定义元字符的字符集合(比如元音字母 a, e, i, o, u ),应该怎么办?
只需要在方括号里列出它们就行了,像[aeiou]可以匹配任何一个英文元音字母,[.?!] 匹配标点符号(“.”“?”或“!”)。也可以轻松地指定一个字符范围,像“[0-9]”代表的含义与“\d”就是完全一致的:一位数字;同理,“[a-z0-9A-Z_]”完全等同于“\w”(如果只考虑英文的话)。

要想匹配给定字符串中任意一个汉字,可以使用“[\u4e00-\u9fa5]”;如果要匹配连续多个汉字,可以使用“[\u4e00-\u9fa5]+”。

排除字符

匹配不符合指定字符集合的字符串。正则表达式提供了“^”字符。这个元字符在行定位符中出现过,表示行的开始。而这里将会放到方括号中,表示排除的意思。

[^a-zA-Z]

该表达式用于匹配一个不是字母的字符。

选择字符

包含着条件选择的逻辑,这就需要使用选择字符(|)来实现。该字符可以理解为“或”,匹配18位身份证的表达式可以写成如下方式:

(^\d{18}$)|(^\d{17})(\d|X|x)$

该表达式的意思是以匹配18位数字,或者17位数字和最后一位。最后一位可以是数字,也可以是X或者x。

转义字符

正则表达式中的转义字符(\)和Python中的大同小异,都是将特殊字符(如“.”“?”“\”等)变为普通的字符。举一个IP地址的实例,用正则表达式匹配诸如“127.0.0.1”格式的IP地址。如果直接使用点字符,格式为:

[1-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}

这显然不对,因为“.”可以匹配一个任意字符。这时,不仅是127.0.0.1这样的IP,连127101011这样的字符串也会被匹配出来。所以在使用“.”时,需要使用转义字符(\)。修改后上面的正则表达式格式为:

[1-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}

括号在正则表达式中也算是一个元字符。

分组

小括号字符的第一个作用就是可以改变限定符的作用范围,如“|”“*”“^”等。

(six|four)th

小括号的第二个作用是分组,也就是子表达式。如(\.[0-9]{1,3}){3},就是对分组(\.[0-9]{1,3})进行重复操作。

在Python中使用正则表达式语法

Python中使用正则表达式时,是将其作为模式字符串使用的。例如,将匹配不是字母的一个字符的正则表达式表示为模式字符串,可以使用下面的代码:

'[^a-zA-Z]'

而如果将匹配以字母m开头的单词的正则表达式转换为模式字符串,则不能直接在其两侧添加引号定界符,例如,下面的代码是不正确的。

'\bm\w*\b'

而是需要将其中的“\”进行转义,转换后的结果为:

'\\bm\\w*\\b'

由于模式字符串中可能包括大量的特殊字符和反斜杠,所以需要写为原生字符串,即在模式字符串前加rR

r'\bm\w*\b'
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值