一、正则表达式
定义:正则表达式是一个特殊的字符串序列,一个字符串是否与我们所设定的这样的字符序列,相匹配。
正则表达式的作用:它的作用:快速检查文本,实现一些替换文本的操作。比如:
- 1,检查一串数字是否是电话号码形式
- 2,检测一个字符串是否符合email的格式
- 3,把一个文本里指定的单词替换为另外一个单词
查找是否包含某个字符串
比如有字符串: a = ‘C|C++|Java|C#|Python|JavaScript’。看以下示例代码:
1 | import re |
正则表达式的灵魂是规则,上面的代码是一个常量,不能说不是规则,不过这并不是正则表达示的广泛应用。
找出字符串中所有的数字
字符串:a = ‘C|C++7|Java8|C#8|Python8|Jav|Python|aScript’1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19'Python':是普通字符
'\d':是元字符
#正则表达式就是元字符和普通字符的组合
#元字符
[百度百科正则表达式](https://baike.baidu.com/item/%E6%AD%A3%E5%88%99%E8%A1%A8%E8%BE%BE%E5%BC%8F/1700215?fr=aladdin)
import re
a = 'C|C++7|Java8|C#8|Python8|Jav|Python|aScript'
#规则
#打印出所有的数字
r = re.findall('\d',a)
print(r)
#匹配一个非数字字符。等价于[^0-9]。grep要加上-P,perl正则支持
r = re.findall('\D',a)
print(r)
#打印结果
PS G:\python> python test14.py
['0', '7', '8', '9', '3']
1,字符集操作
a = ‘abc,acc,adc,aec,afc,ahc’,找到’a[cf]c’,就是找到字符串中间是c或f,两边分别是a和c。1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31#字符集
import re
a = 'abc,acc,adc,aec,afc,ahc'
#字符集的特性:[]中间的字符是 或 关系
r = re.findall('a[cf]c',a)
print(r)
#打印
PS G:\python\正则表达式> python test15.py
['acc', 'afc']
import re
a = 'abc,acc,adc,aec,afc,ahc'
#匹配不是c、f、d的字符
r = re.findall('a[^cfd]c',a)
print(r)
#打印结果
PS G:\python\正则表达式> python test15.py
['abc', 'aec', 'ahc']
import re
a = 'abc,acc,adc,aec,afc,ahc'
#匹配是c到f的字符
r = re.findall('a[c-f]c',a)
print(r)
#打印结果
PS G:\python\正则表达式> python test15.py
['acc', 'adc', 'aec', 'afc']
2,概括字符集
1 | #找出全部数字 |
小总结:1
2
3
4#概括字符集
# \d \D
# \w单词字符 \W
# \s空白字符 \
3,数量词
1 | # |
为什么匹配到3个不会输出,而是会继续匹配?这涉及数量词的一个重要概念。
贪婪模式和非贪婪模式
数量词的贪婪和非贪婪方式:python的数量词默认是贪婪方式,所以匹配到3个的时候,会继续匹配,到第六个都匹配,后面不配,就才结束。所以会匹配出:python、java、php。
非贪婪模式:在规则后面加’?’:’[a-z]{3,6}?’
以上规则打印结果:[‘pyt’, ‘hon’, ‘jav’, ‘php’]
- :打印0次或无限多次
- :匹配1次或无限多次
? :匹配0次或1次
1 | #以下三种情况第一行是代码,第二行是对应代码的输出结果。 |
1 |
|
1 | import re |
贪婪模式和非贪婪模式1
2
3
4
5
6
7
8
9
10
11
12
#非贪婪和贪婪模式
language = 'pythocpython#JavaPHPpythonn'
#['pytho', 'python', 'python']python']
r = re.findall('python?',language)
print(r)
#['python', 'python']
s = re.findall('python{1,2}?',language)
print(s)
#['python', 'pythonn']
t = re.findall('python{1,2}',language)
print(t)
边界匹配
qq号是否匹配(4到8位)?1
2