正则表达式:
正则表达式在线测试工具:https://regex101.com/
百度百科解释正则表达式为正则表达式是对字符串操作的一种逻辑公式。
我们可以将正则表达式理解为一种规则,自己设定的一种规则,让计算机根据这个规则来找到你需要的字符串。但是这个规则你怎么制定,当然不能瞎制定,对电脑说:”你给我找到这篇文章的所有包含刘德华的句子(字符串)!“,电脑当然不懂,所以我们下面交代一些符号,让你正确的建立正则表达式,建立规则,让电脑能帮你找到你想要的字符。
文末有正则表达式的最常见应用。
基本用法
- ?: 表示?前面的字符需要出现0次或一次。简单来说就是?前面的字符可有可无。比如你输入一个正则表达式tea?,那么计算机就会找到te,tel这样的字符串。
- *:表示*前面的字符需要出现0个或多次。比如你输入一个正则表达式ab*c,那么计算机就会找到ac,abc,abbbbbc这样的字符串。
- +:表示+前面的字符需要出现1次以上。比如你输入一个正则表达式ab+c,那么计算机就会找到abc,abbbbc这样的字符串。
- {}:精确匹配:想匹配几次就匹配几次。比如你输入一个正则表达式ab{6}c,那么计算机就会找到abbbbbbc这样的字符串。你输入一个正则表达式ab{2,6}c,那么计算机就会找到abbc,abbbc,abbbbc,abbbbbc,abbbbbbc这样的字符串。ab{2,}c的话就是b出现两次以上。
以上单个限定符规则就讲完了,如果是想让字符串出现一定次数的话,用()括起来就好了。比如(ab)+c,文章中ababababc等满足规则的字符串就会被找到。
中级用法
或运算符:|,如a (baby|mom),文章就会找到a baby或a mom。
字符类:[],可以匹配由框内字符构成的字符串。比如制定正则表达式[alo]+,那么afsgsglo就可以被找到(匹配到),因为afsgsglo中包含alo。相对于()的区别就是它不讲顺序,只要存在即可。常用例子:[a-zA-Z0-9]+。
非运算符:^,一般放在表达式前面,表示除了他们以外的字符都可被匹配。比如你天生不能见到大写字母,见到了就想吐,你就可以输入正则表达式[ ^A-Z]+。
元字符:
编号 | 示例 | 说明 |
---|---|---|
1 | . | 匹配除换行符以外的任何字符 |
2 | \d | 匹配数字:[0-9] |
3 | \D | 匹配非数字:[^0-9] |
4 | \s | 匹配空格字符:[\t\r\n\f] |
5 | \S | 匹配非空格:[^\t\r\n\f] |
6 | \w | 匹配单字字符: [A-Za-z0-9_] |
7 | \W | 匹配非单字字符: [ ^A-Za-z0-9_] |
匹配行首,如a^,只能找到行首出现a的字符串。如afff。
匹配行尾,如a$,只能找到行尾出现a的字符串。如llla。
高级用法:
贪婪匹配与懒惰匹配:
贪婪匹配就是匹配尽可能多。懒惰匹配就是匹配尽可能少。
如你想在
<div><span>hello world</span></div>
里匹配出标签div和span。
我们不自觉地就想用<.+>,<>里面只要有东西就匹配。
但是最后的结果是:
共找到 1 处匹配:
<div><span>hello world</span></div>
我们将贪婪匹配转为懒惰匹配,将正则表达式改为<.+?>,则最后结果为:
共找到 4 处匹配:
<div>
<span>
</span>
</div>
便完成了。
常见应用
正则表达式判断密码python代码:
import re
lower = re.compile('[a-z]')
upper = re.compile('[A-Z]')
digit = re.compile('[0-9]')
wrong = re.compile('[^a-zA-Z0-9]')
while True:
password = input('请输入大于8位的包含大小写字母和数字的密码:')
if len(password) < 8:
print('输入的密码小于8位')
elif wrong.search(password) != None:
print('包含无效字符')
else:
if lower.search(password) == None:
print('未包含小写字母')
elif upper.search(password) == None:
print('未包含大写字母')
elif digit.search(password) == None:
print('未包含数字')
else:
print('输入成功')
break