下载安卓APP箭头
箭头给我发消息

客服QQ:3315713922

Python如何使用正则表达式查找字符串

作者:课课家教育     来源: http://www.kokojia.com点击数:2175发布时间: 2018-11-29 15:05:00

标签: CRMpython实战项目Python开发python全栈开发

大神带你学编程,欢迎选课

在处理字符串时,经常会有查找符合某些复杂规则的字符串的需求。那么应该怎样去快速查找呢,下面与课课家小编一起去看看。

正则表达式就是用于描述这些规则的工具。换句话说正则表达式就是记录文本规则的代码。对于接触过DOS的用户来说,如果想匹配当前文件夹下所有的文本文件。可以输入“dir*.txt”命令。按enter键后。所有“*.txt”文件将会被列出来。这里的“*.txt”即可理解为一个简单的正则表达式。

1 行定位符

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

^tm 该表达式表示要匹配字符串tm的开始位置是行头。如tm,equal,Tomorrow,Moon 就可以匹配,而Tomorrow Moon equal tm则不匹配,但如果使用:

tm$

后者可以匹配,而前者不能匹配。如果要匹配的字符串可以出啊先在字符串的任意部分,那么可以直接写成:tm

这样两个字符串就可以匹配了。

2 元字符

通过上面的学习我们已经知道几个很有用的元字符了,如^和$。其实,正则表达式里还有更多的元字符,下面来看看更多的例子:

\\bmr\\w*\\b

匹配以字母mr开头的单词,先是从某个单词开始处(\\b),然后匹配字母mr,接着是任意数量的字母或数字(\\w*),最后是单词结束处(\\b)。该表达式可以匹配“mrsoft”,“mrbook”,和“没人23456”等更多常用元字符如下表所示。

\\w匹配字母、数字、下划线。

\\s匹配任何空白字符,包括空格、制表符、换页符等等。

\\d匹配一个数字字符。

\\b匹配一个单词边界,也就是指单词和空格间的位置。。

$匹配输入字符串的结束位置。

^匹配输入字符串的开始位置。

3 重复

使用“\\w”匹配任意数量的字母或数字。如果想匹配特定数量的数字,正则表达式也为我们提供了限定字符(指定数量的字符)来实现该功能。例如,匹配8位qq号可用如下表达式:

^\\d{8}$

常用的限定符如下所示:?当该字符紧跟在任何一个其他限制符 (*, +, ?, {n}, {n,}, {n,m}) 后面时,匹配模式是非贪婪的。非贪婪模式尽可能少的匹配所搜索的字符串,而默认的贪婪模式则尽可能多的匹配所搜索的字符串。例如,对于字符串 "oooo",'o+?' 将匹配单个 "o",而 'o+' 将匹配所有 'o'。

+匹配前面的子表达式一次或多次。例如,'zo+' 能匹配 "zo" 以及 "zoo",但不能匹配 "z"。+ 等价于 {1,}。

*匹配前面的子表达式零次或多次。例如,zo* 能匹配 "z" 以及 "zoo"。* 等价于{0,}。

{n}n 是一个非负整数。匹配确定的 n 次。例如,'o{2}' 不能匹配 "Bob" 中的 'o',但是能匹配 "food" 中的两个 o。

{n,}n 是一个非负整数。至少匹配n 次。例如,'o{2,}' 不能匹配 "Bob" 中的 'o',但能匹配 "foooood" 中的所有 o。'o{1,}' 等价于 'o+'。'o{0,}' 则等价于 'o*'。

{n,m}m 和 n 均为非负整数,其中n <= m。最少匹配 n 次且最多匹配 m 次。例如,"o{1,3}" 将匹配 "fooooood" 中的前三个 o。'o{0,1}' 等价于 'o?'。请注意在逗号和两个数之间不能有空格。

4 字符类

正则表达式查找数字和字母是很简单的,因为已经有了对应这些字符集合的元字符(\\d,\\w),但是如果要匹配没有预定义元字符的字符集合(比如a,e,i,o,u),应该怎么办?

很简单,只需要在方括号里列出它们就行了,像[aeiou]就匹配任何一个英文元音字母,[.?!]匹配标点符号“.”,"?"或"!"。也可以轻松的指定一个字符范围,像[0-9]代表的含义与\\d就是完全一致的:代表一位数字:同理,[a-z0-9A-Z_]也完全等同于\\w(如果只考虑英文的话)。

5 排除字符

前面列出的是匹配符合指定字符集合的字符串。现在反过来,匹配不符合指定字符集合的字符串。正则表达式提供了“^"字符,表示行的开始,而这里将会放到方括号中,表示排除的意思。例如:

[^a-zA-Z]该表达式用于匹配一个不是字母的字符。

6 选择字符

试想一下,如何匹配身份证号码呢?首先需要了解一下身份证号码的规则。身份证号码长度为15位或者18位。如果为18位,前17位为数字最后一位为校验位,可能为数字或字符X。

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

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

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

7 转义字符

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

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

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

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

更多相关知识请点击课课家提供的链接,也可以选择课课家教育系统性学习Python

赞(21)
踩(0)
分享到:
华为认证网络工程师 HCIE直播课视频教程