Python合集之Python正则表达式(二)
在上一节中我们了解到了Python正则表达式中的行定位符、元字符及限定符。今天我们继续分享相关的正则表达式。
1.字符类
正则表达式查找数字和字母是很简单的,因为已经有了对应这些字符集合的元字符(“\d”、"\w"),但是如有要匹配没有预定字符的字符集合(比如:元音字母a e i o u),应该怎么办?
很简单,只需要在方括号里列出他们就行了,像[aeiou]可以匹配任何一个英文元音字母,[.?!]匹配标点符号(. ? !)。也可以轻松的指定一个字符范围,像[0-9]代表的含义与“\d”就是完全一致的,一位数字;同理[a-z0-9A-Z]完全等于“\w”。
注:要想匹配给定字符串中任意一个汉字,可以使用[\u4e00-\u9fa5];如果要匹配连续多个汉字,可以使用[\u4e00-\u9fa5]+。
2.排除字符
上面讲的是匹配符合指定字符集合的字符串,如果要匹配不符合指定字符集合的字符换,正则表达式提供了 ^ 字符。这个字符除了表示行的开始,放在方括号中,表示排除的意思。例如:
[^a-zA-z]
该表达式用于匹配一个不是字母的字符。
3.选择字符
如果匹配的身份证号码,首先我们了解一下身份证号码的规则。身份证号码长度为15位或者18位,如果是15位,则全部是数字,如果为18位,前17位是数字,最后一位检验位,可能为数字或者字母X。
在上面的描述中,包含着条件选择逻辑,这就是需要使用选择字符(|)来实现,该字符可以理解为 “或”,匹配身份证的表达式可以写成如下:
(^\d{15}$)|(^\d{18}$)|(^\d{17})(\d|X|x)$
4.转义字符
正则表达式中的转义字符(\)和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}
注:括号在正则表大师中也算是一个字符
5.分组
(six|four)th
上面这个表达式的意思是匹配单词 sixth或者 fourth,如果不使用小括号,那么就变成了匹配单词six和 fourthle 。
小括号的第二个作用是分组,也就是子表达式,如:
(\.[0-9]{1,3}){3},就是对分组(\.[0-9]{1,3})进行重复操作。
花絮:
本期的Python 字符串正则表达式就分享到这里,下期我们将继续分享Python字符串正则表达式的相关知识,感兴趣的朋友可以关注我。
同时也可以关注下我的个人 微信订阅号,园子里面的文章也会第一时间在订阅号里面进行推送跟更新。