在处理字符串时,经常会有查找符合某些复杂规则的字符串的需求。那么应该怎样去快速查找呢,下面与课课家小编一起去看看。
正则表达式就是用于描述这些规则的工具。换句话说正则表达式就是记录文本规则的代码。对于接触过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
¥399.00
¥29.00
¥498.00
¥299.00