正则表达式
正则表达式介绍
正则表达式,你可以把它当作是通配符的增强版,它所做的事情就是去帮你匹配指定规则的字符串。
而且它在计算机中的应用可能远比你想象的要多的多:
- 我们平时编译器中的词法分析器,会使用正则表达式去匹配代码中的关键字。
- 网站上的注册表单会用到正则表达式去判断密码的复杂程度。
- 在爬虫中,我们同样可以用正则表达式去提取我们需要的信息。
在线测试工具: https://regex101.com/
基础用法
限定符
- ?符:它代表前面的这个字符出现0次或1次,也就是可有可与。
- *符:它会去匹配0个或者【多】个字符。
- +符:它会匹配出现【1】次以上的字符。
- {}符:它可以指定字符出现的次数。
“或” 运算符
- “或” 运算符用 ‘|’ 来表示。
字符类
- ()符:它可以用来多个字符来使用限定符的匹配。
- []符:方括号里的内容代表要求匹配的字符只能取自于它们。
- [a-zA-Z]:表示大小写英文字母,所以英文字符。
- [0-9]:表示数字。
- [^0-9]符:如果在方括号前面写上一个尖号(脱字符),则代表要匹配除了尖号后面列出的【以外】的字符(包含换行符)。 # 数字以外的字符
元字符
正则表达式中大多数元字符都是以反斜杠开头
- \d:代表数字字符,等同于[0-9]。
- \D:非数字字符。
- \w:代表“单词“字符,也就是所有的英文字符、数字加上下划线。
- \W:非“单词”字符。
- \s:代表空白字符(包含Tab和换行符)。
- \S:非空白字符。
- .符:.点在正则表达式中也是一个特殊字符,代表任意字符但不包含换行符。
- ^符:匹配行首。
- $符:匹配行尾。
高级概念
贪婪与懒惰匹配
在*、+、{}匹配字符的时候,默认会去匹配尽可能多的字符。只要在后面加上?就变成了懒惰匹配。
比如:
import re
# 去匹配html标签
str1 = '<span><b>This is a sample text</b></span>'
str2 = re.findall('<.+>', str1)
str3 = re.findall('<.+?>', str1)
print(str2) # ['<span><b>This is a sample text</b></span>']
print(str3) # ['<span>', '<b>', '</b>', '</span>']