1 正则表达式的简介
1.1 概念
正则表达式是对字符串操作的⼀种逻辑公式,就是⽤事先定义好的⼀些特定字符、及这些特定字符的组合,组成⼀个“规则字符串”,这个“规则字符
串”⽤来表达对字符串的⼀种过滤逻辑
1.2 正则表达式的应⽤场景
表单验证(例如 : ⼿机号、邮箱、身份证… )
爬⾍
2 正则表达式对Python的⽀持
2.1 普通字符
字⺟、数字、汉字、下划线、以及没有特殊定义的符号,都是"普通字符"。正则表达式中的普通字符,在匹配的时候,只匹配与⾃身相同的⼀个字符。
例如:表达式c,在匹配字符串abcde时,匹配结果是:成功;匹配到的内容
是c;匹配到的位置开始于2,结束于3。(注:下标从0开始还是从1开始,因当前编程语⾔的不同⽽可能不同)
match()函数
- match(pattern, string, flags=0)
- 第⼀个参数是正则表达式,如果匹配成功,则返回⼀个match对象,否则返
回⼀个None - 第⼆个参数表示要匹配的字符串
- 第三个参数是标致位⽤于控制正则表达式的匹配⽅式 如: 是否区分⼤⼩写,多⾏匹配等等
import re
# 正则表达式
pattern = 'pythonn'
s = 'python and java'
result = re.match(pattern,s)
if result:
print(result)
else:
print('没有匹配到')
结果
没有匹配到
但是
import re
# 正则表达式
pattern = 'pythonn'
s = 'pythonn and java'
result = re.match(pattern,s)
if result:
print(result)
else:
print('没有匹配到')
及结果
<_sre.SRE_Match object; span=(0, 7), match='pythonn'>
然后
import re
# 正则表达式
pattern = 'pythonn'
s = 'pythonn and java'
result = re.match(pattern,s)
if result:
print(result.group()) # 匹配的那个内容 pythonn
print(result.start()) # 0
print(result.end()) # 7
print(result.span()) # (0, 7)
else:
print('没有匹配到')
还有
import re
# 正则表达式
pattern = 'pytho'
s = 'pythonn and java'
result = re.match(pattern,s)
if result:
print(result.group()) # 匹配的那个内容
# print(result.start()) # 0
# print(result.end()) # 7
# print(result.span()) # (0, 7)
else:
print('没有匹配到')
结果
pytho
2.2 元字符
正则表达式中使⽤了很多元字符,⽤来表示⼀些特殊的含义或功能
主要是一个字符
import re
re.match(r'a.c','abc').group()
Out[3]: 'abc'
re.match(r'a.c','aHc').group()
Out[4]: 'aHc'
re.match(r'a.c','a2c').group()
Out[5]: 'a2c'
re.match(r'a|c','a2c').group()
Out[6]: 'a'
re.match(r'a|c','b').group()
Traceback (most recent call last):
File "D:\Anaconda3\lib\site-packages\IPython\core\interactiveshell.py", line 2910, in run_code
exec(code_obj, self.user_global_ns, self.user_ns)
File "<ipython-input-7-9b51cc7ff806>", line 1, in <module>
re.match(r'a|c','b').group()
AttributeError: 'NoneType' object has no attribute 'group'
从前开始匹配,如果前面没有,就报错
re.match(r'a|c','ac').group()
Out[8]: 'a'
re.match(r'a|c','ca').group()
Out[9]: 'c'
re.match(r'a|c','bac').group()
Traceback (most recent call last):
File "D:\Anaconda3\lib\site-packages\IPython\core\interactiveshell.py", line 2910, in run_code
exec(code_obj, self.user_global_ns, self.user_ns)
File "<ipython-input-10-2ceb8f2fbfd0>", line 1, in <module>
re.match(r'a|c','bac').group()
AttributeError: 'NoneType' object has no attribute 'group'
re.search(r'a|b','cba').group()
Out[12]: 'b'
- [] 匹配字符集中的一个字符,也是最前面的
re.match(r'[abc]','bac').group()
Out[13]: 'b'
re.match(r'[abc]','abac').group()
Out[14]: 'a'
re.match(r'[abc]2','abac').group()
Traceback (most recent call last):
File "D:\Anaconda3\lib\site-packages\IPython\core\interactiveshell.py", line 2910, in run_code
exec(code_obj, self.user_global_ns, self.user_ns)
File "<ipython-input-15-1730d91ab1a2>", line 1, in <module>
re.match(r'[abc]2','abac').group()
AttributeError: 'NoneType' object has no attribute 'group'
re.match(r'速度与激情[12345]','速度与激情3'