正则表达式之re模块
re模块
一、什么是正则表达式与re模块?
1.1 字符组
1.2 元字符
1.2.1 单个使用
1.2.2 组合使用
二、为什么要使用正则
三、如何使用
3.1 re模块的三种比较重要的方法
3.1.1 findall()
3.1.2 search()
3.1.3 match()
四、示例
4.1 检测手机号码的合法性
一、什么是正则表达式与re模块?
1.1 字符组
1.2 元字符
1.2.1 单个使用
1.2.2 组合使用
二、为什么要使用正则
三、如何使用
3.1 re模块的三种比较重要的方法
3.1.1 findall()
3.1.2 search()
3.1.3 match()
四、示例
4.1 检测手机号码的合法性
re模块
在python中,若想使用正则表达式,必须通过re模块来实现
import re一、什么是正则表达式与re模块?
正则表达式是一门独立的技术, 任何语言都可以使用正则表达式, 
正则表达式是由一堆特殊的字符组合而来的。
1.1 字符组
- 字符组:
 - [0-9] 可以匹配到一个0-9的字符
- [9-0]: 报错, 必须从小到大
- [a-z]: 从小写的a-z
- [A-Z]: 从大写A-Z
- [z-A]: 错误, 只能从小到大,根据ascii表来匹配大小。
- [A-z]: 总大写的A到小写的z。
 注意: 顺序必须要按照ASCII码数值的顺序编写。 
1.2 元字符
1.2.1 单个使用

1.2.2 组合使用
- 组合使用
 - \w\W: 匹配字母数字下划线与非字母数字下划线,匹配所有。
- \d\D: 无论是数字或者非数字都可以匹配。
- \t: table
- \n: 换行
- \b: 匹配单词结尾,tank jasonk
- ^: startswith
 - '^'在外面使用: 表示开头。
- [^]: 表示取反的意思。
 
- $: endswith
- ^$: 配合使用叫做精准匹配,如何限制一个字符串的长度或者内容。
- |: 或。ab|abc如果第一个条件成立,则abc不会执行,怎么解决,针对这种情况把长的写在前面就好了,一定要将长的放在前面。
- [^...]: 表示取反的意思。
- [^ab]: 代表只去ab以外的字符。
- [^a-z]: 取a-z以外的字符。
 
二、为什么要使用正则
比如要获取“一堆字符串”中的“某些字符”, 
正则表达式可以帮我们过滤,并提取出想要的字符数据。
- 比如过滤并获取 “tank”
'wafawrjkwagfiu21knriut8ankjfdgau0q92ru20yrisana tank wyqfwqrqyr9q 9'
```python
import re
str1 = 'wafawrjkwagfiu21knriut8ankjfdgau0q92ru20yrisana tank wyqfwqrqyr9q 9'
res = re.findall('tank', str1)
print(res)- 应用场景:
- 爬虫: re, BeautifulSoup4, Xpath, selector
- 数据分析过滤数据: re, pandas, numpy...
- 用户名与密码、手机认证:检测输入内容的合法性
- 过滤关键字
 
三、如何使用
3.1 re模块的三种比较重要的方法
3.1.1 findall()
可以匹配 "所有字符" ,拿到返回的结果,返回的结果是一个列表。
import re
str1 = 'sean tank json'
# findall
res = re.findall('[a-z]{4}', str1)
print(res)3.1.2 search()
在匹配一个字符成功后,拿到结果后结束,不往后匹配。
import re
str1 = 'sean tank json'
# search
res = re.search('[a-z]{4}', str1)
print(res)  # 返回的是一个对象
print(res.group())  # 从对象中取值
<re.Match object; span=(0, 4), match='sean'>
sean3.1.3 match()
从匹配字符的开头匹配,若开头不是想要的内容,则返回None。
import re
str1 = 'sean tank json'
# match
res = re.match('sean', str1)
print(res)
print(res.group())
<re.Match object; span=(0, 4), match='sean'>
sean
# 如果没有匹配到则会返回None,然后打印的时候会出错
None
Traceback (most recent call last):
  File "G:/python项目/day17/re模块.py", line 11, in <module>
    print(res.group())
AttributeError: 'NoneType' object has no attribute 'group'
# 因此我们可以加一个if判断句,可以避免上面的问题
import re
str1 = 'sean tank json'
# match
res = re.match('12', str1)
print(res)
if res:
    print(res.group())
四、示例
4.1 检测手机号码的合法性
# 纯python校验
while True:
    phone_number = input('请输入手机号码:').strip()
    # not > and > or
    if len(phone_number) == 11 and (phone_number.startswith(
        '13'
    ) or phone_number.startswith(
        '14'
    ) or phone_number.startswith(
        '15'
    ) or phone_number.startswith(
        '19'
    )):
        print('手机号码合法!')
        break
    else:
        print('手机号码不合法!')
# re校验
import re
while True:
    phone_number = input('手机号:')
    if re.match('^(13|14|15|19)[0-9]{9}', phone_number):
        print('合法')
        break
    else:
        print('不合法')
 
                
            
         浙公网安备 33010602011771号
浙公网安备 33010602011771号