正则表达式
正则表达式可以被认为是一门语言,专门用来处理字符串匹配,其语法构成只有表达式。
正则表达式通过元字符进行排列组合来匹配字符串。
也可以通过简单字符来进行匹配,相当于字符串匹配。
元字符
元字符是具有固定含义的特殊符号。
常见元字符有:
-
.
匹配除换行符以外的所有字符想要单纯匹配一个**.**时需要加转义字符
\
。比如:\.
。 -
\w
匹配数字字母下划线 -
\d
匹配数字字符 -
\s
匹配任意空白符 -
\n
匹配换行符 -
\t
匹配制表符 -
^
匹配开始例如匹配一个字符串开始为"zhang" :"^zhang"
-
$
匹配结束 -
\W
匹配非(除换行符以外的所有字符)匹配
\w
不匹配的内容。 -
\D
匹配非数字字母下划线匹配
\d
不匹配的内容。 -
\S
匹配非任意空白符匹配
\s
不匹配的内容。 -
a|b
| 表示匹配字符a|b例如匹配字符串中的"zhang"或"wang":
(zhang|wang)
-
()
在表达式中嵌套表达式或改变表达式优先级 -
[...]
匹配字符组中的内容常见的有 [a-z] 表示匹配所有小写字母 或 [_a-z0-9A-Z] 表示的意义与
\w
相同。 -
[^...]
匹配非字符组中的内容表示匹配不在字符组中的内容
量词
量词搭配元字符使用
-
*
表示待匹配内容出现0次或多次\d*
表示匹配一个或多个数字 -
+
表示待匹配内容至少出现一次.+
表示至少出现一次数字或字母或下划线 -
?
表示待匹配内容出现0次或1次 -
{n}
表示待匹配内容出现n次\d{11}
匹配一个11位数字,可以用来匹配电话号码
匹配一个9位或11位的qq号:"^(\d{9}|\d{11})$" -
{n,}
表示待匹配内容出现至少n次 -
{n,m}
表示待匹配内容出现n次至m次
Python中的re模块
不同语言对正则表达式有不同的接口,方便我们使用。这里使用Python中的re模块
(regular express缩写),处理正则表达式进行匹配。
re.search(pattern,string)
接收一个正则表达式pattern和字符串string返回一个对象re.Match
使用成员方法group()可以取出匹配到的内容。
特点:匹配到一个就返回。
resp = re.search(r'\d*\.{1}\d+',"p3.1415926")
print(resp.group()) # 输出: 3.1415926
re.match(pattern,string)
接收一个正则表达式pattern和字符串string返回一个对象re.Match
使用成员方法group()可以取出匹配到的内容。
特点:从字符串头开始匹配,匹配到一个就返回。
resp = re.match(r'\d*\.{1}\d+',"p3.1415926")
print(resp) # 从头开始匹配无法匹配到值 输出:None
re.findall(pattern,string)
接收一个正则表达式pattern和字符串string返回一个list
放有所有符合表达式的结果串。
特点:返回所有。
resp = re.findall(r'\d',"1a2b3c4d--")
print(resp) # 输出:1234
re.finditer(pattern,string)
接收一个正则表达式pattern和字符串string返回一个可迭代对象使用for循环可以发现取出的每一项都是一个对象re.Match
。
特点:返回一个可迭代对象。
resp = re.finditer(r'\d',"1a2b3c4d--")
for item in resp:
print(item.group())
"""
输出:
1
2
3
4
"""