正则表达式简介 {#正则表达式简介}
正则表达式(Regular Expression,简称regex)是一种强大的文本处理工具,用于描述、匹配一系列符合特定规则的字符串。它通过使用普通字符和特殊字符(称为元字符)的组合,来定义一个文本模式,从而实现对字符串的搜索、替换等操作。正则表达式在计算机科学中有着广泛的应用,几乎所有现代编程语言都支持正则表达式的使用,包括但不限于Java、JavaScript、Python等。
正则表达式在 Python 中的基本应用 {#正则表达式在-Python-中的基本应用}
使用正则表达式,首先需要引入一个包 re
。
Python中,正则表达式的匹配方法分为三种,分别为 match
, search
, findall
。以上的方法都接收两个参数,第一个为需要匹配的字符串或正则表达式,第二个为目标字符串。
match方法 :从头开始匹配,匹配一次。若目标字符串的开头没有与表达式匹配的元素,返回 None
。
search方法 :从头开始寻找,当查询到第一个符合的位置时,返回找到的元素并停止。
findall方法 :查找所有匹配的元素,并全部返回。
正则表达式的语法 {#正则表达式的语法}
单字符的规则 {#单字符的规则}
以下组合均代表一个字符。
.
:代表任意的字符,其中\.
代表点本身。[]
:代表属于括号内范围的字符,其中若表示区间,用"-"表示,不同字符之间不带空格。比如[1-7a-dA-Z]
。\d
:表示数字0-9。\D
:表示非数字。\s
:表示空白(空格或Tab)。\S
:表示非空白。\w
:表示单词字符(大小写,数字和下划线)\W
:表示非单词字符。
注意,由于反斜杠在字符串中代表转义字符,因此在代码中需要用"r"来取消对转义字符的识别,示例如下。
|---------------|----------------------------------------------------------------------|
| 1 2 3
| import re s = 'abcdefg1' print (re. match ( r'^[a-g]+\d$' ))
|
字符长度限制规则 {#字符长度限制规则}
以下表达式表示了对前者字符数量的限制:
*
:表示0到无数个+
:表示1到无数个?
:表示0或1个{m}
:表示该字符只能出现m次{m,}
:表示该字符最少出现m次{m,n}
:表示出现m到n次(其中包含n)
需要注意的是,正则的语法中,对空格的限制较为严格,如上述的表达式
{m,n}
,不能出现任何空格,否则匹配无效。
边界限制 {#边界限制}
以下表达式限制了字段的边界,即规定查询整个字符串还是字符串的子串。
^
:表示字符串开头$
:表示字符串结尾\b
:表示单词边界\B
:表示非单词边界
分组和选择 {#分组和选择}
()
:表示这是一个单独的字符串分组,在父级表达式中视作一个字符|
:在括号内使用,表示"或"。
应用实例 {#应用实例}
题目: 用正则表达式判定一个字符串是QQ号,长度为5-11位,第一位不能为0.
代码 :
|-----------------|-------------------------------------------------------------------------------------|
| 1 2 3 4
| import re s = '12345678' r = r'^[1-9][0-9]{4,10}$' print (re. match (r, s))
|
题目: 用正则表达式判定一个字符串是电子邮件,电子邮件的规范为 xxx[.xxx.xxx]@xxx[.xxx.xxx].xxx
代码 :
|-----------------|-----------------------------------------------------------------------------------------------------------------------|
| 1 2 3 4
| import re s = ' 1352218398a@gmail.com ' r = r'(^\w+(\.\w+)*@(qq|gmail|163)(\.\w+)$)' print (re. match (r, s))
|
代码返回的结果如下:
<re.Match object; span=(0, 21), match=' 1352218398a@gmail.com '>
这个代码中, \w+
表示至少一个单词字符, (\.\w+)*
表示可以存在由点号和至少一个字符组成的后缀, (qq|gmail|163)
表示可选三种字段中的任意一个。
注意: findall()
方法会将每一个分组列出,对于存在多个分组的表达式,应选择 match
方法,并且在表达式两边加上括号。
(润啦,最近的Python基础告一段落!)