学习笔记:Re 库主要功能函数

0. 笔记的学习视频来源:

  • https://www.bilibili.com/video/BV1pt41137qK?p=37

1. 正则表达式-Regular expression 简称 RE

作用:用来简洁表达一组字符串的表达式。达到一行胜千言.存在以下2种正则表达式的表示类型

1.1 raw string 类型(原生字符串类型)

re 库采用 raw string 表示正则表达式,表示为: r’text’
例如:中国大陆的邮政编码正则表达式:r’[1-9]\d{5}’
特点:不包含转义符的字符串的时候使用更方便

1.2 string类型,例如遇到转移符号 , 处理起来会更繁琐。

例如:中国大陆的邮政编码正则表达式:[1-9]\d{5}
使用string类型,要对斜杆进行处理,例如双斜杆处理:[1-9]\d{5}

2. Re 库的主要功能函数

函数说明
re.search()在一个字符串中搜索匹配正则表达式的第一个位置,返回match对象
re.match()从一个字符串的开始位置起匹配正则表达式,返回match对象
re.findall()搜索字符串,以列表类型返回全部能匹配的字串
re.split()将一个字符串按照正则表达式匹配结果进行分割,返回列表类型
re.finditer()搜索字符串,返回一个匹配结果的迭代类型,每个迭代元素是match
re.sub在一个字符串中替换所有匹配正则表达式的字串,返回替换后的字符串

2.1 re.search(pattern, string, flags=0)

re.search(pattern, string, flags=0):

  • pattern: 正则表达式的字符串或原生字符串表示
  • string: 待匹配的字符串
  • flags:正则表达式使用时的控制标记(re.I, re.M, re.S)
    常用标记 说明
    re.I: re.IGNORECASE 忽略正则表达式的大小写,[A-Z]能够匹配小写字符
    re.M: re.MULTILINE 正则表达式中的^操作符能够给定字符串的每行当作匹配的开始。例如匹配一篇文章中的每行
    re.S: re.DOTALL 正则表示式的.操作符能够匹配所有字符串,默认匹配出换行外的所有字符串,设置了这个就可以匹配包含换行符的所有了
"""
re.search(pattern, string, flags=0):
- pattern: 正则表达式的字符串或原生字符串表示
- string: 待匹配的字符串
- flags:正则表达式使用时的控制标记(re.I, re.M, re.S)
常用标记                  说明
re.I: re.IGNORECASE    忽略正则表达式的大小写,[A-Z]能够匹配小写字符
re.M: re.MULTILINE     正则表达式中的^操作符能够给定字符串的每行当作匹配的开始。例如匹配一篇文章中的每行
re.S: re.DOTALL        正则表示式的.操作符能够匹配所有字符串,默认匹配出换行外的所有字符串,设置了这个就可以匹配包含换行符的所有了
"""
def searchApiDemo():
    match = re.search(r'[1-9]\d{5}', 'shenzhen 518000')
    if match:
        # 如果匹配到邮政编码,则打印 518000
        # searchApiDemo:518000
        print('searchApiDemo:' + match.group(0))

2.2 re.match(pattern, string, flags=0)

re.match(pattern, string, flags=0)
从一个字符串的开始位置起匹配正则表达式,返回match对象

  • pattern: 正则表达式的字符串或原生字符串表示
  • string:待匹配字符串
  • flags:正则表达式使用时的控制标记
"""
re.match(pattern, string, flags=0)
从一个字符串的开始位置起匹配正则表达式,返回match对象
- pattern: 正则表达式的字符串或原生字符串表示
- string:待匹配字符串
- flags:正则表达式使用时的控制标记
"""
def matchApiDemo():
    match = re.match(r'[1-9]\d{5}', 'shenzhen 518000')
    if match:
        # 无法匹配到
        print('matchApiDemo:' + match.group(0))

    match = re.match(r'[1-9]\d{5}', '518000 shenzhen')
    if match:
        # 从头位置开始就可以了
        # matchApiDemo:518000
        print('matchApiDemo:' + match.group(0))

2.3 re.findall(pattern, string,flags=0)

re.findall(pattern, string,flags=0)
搜索字符串,以列表类型返回全部能匹配的字串

  • pattern: 正则表达式的字符串或原生字符串表示
  • string:待匹配字符串
  • flags:正则表达式使用时的控制标记
"""
re.findall(pattern, string,flags=0)
搜索字符串,以列表类型返回全部能匹配的字串
- pattern: 正则表达式的字符串或原生字符串表示
- string:待匹配字符串
- flags:正则表达式使用时的控制标记
"""
def findallApiDemo():
    # 返回的是一个列表
    ls = re.findall(r'[1-9]\d{5}', 'shenzhen 518000 shenzhen123456')
    for info in ls:
    	# findallApiDemo:518000
    	# findallApiDemo:123456
        print('findallApiDemo:' + info)

2.4 re.split(pattern, string, maxsplit=0, flags=0)

re.split(pattern, string, maxsplit=0, flags=0)
将一个字符串按照正则表达式匹配结果进行分割,返回列表类型

  • pattern: 正则表达式的字符串或原生字符串表示
  • string:待匹配字符串
  • maxsplit:最大分割数,剩余部分作为最后一个元素输出
  • flags:正则表达式使用时的控制标记
"""
re.split(pattern, string, maxsplit=0, flags=0)
将一个字符串按照正则表达式匹配结果进行分割,返回列表类型
- pattern: 正则表达式的字符串或原生字符串表示
- string:待匹配字符串
- maxsplit:最大分割数,剩余部分作为最后一个元素输出
- flags:正则表达式使用时的控制标记
"""
def splitApiDemo():
    # 返回的是一个列表,若将maxsplit设置为1,打印:split:shenzhen split: shenzhen123456
    ls = re.split(r'[1-9]\d{5}', 'shenzhen 518000 shenzhen123456', 1)
    for info in ls:
        print('split:' + info)

2.5 re.finditer(pattern, string, flags=0)

re.finditer(pattern, string, flags=0)
搜索字符串,返回一个匹配结果的迭代类型,每个迭代元素是match对象

  • pattern: 正则表达式的字符串或原生字符串表示
  • string:待匹配字符串
  • flags:正则表达式使用时的控制标记
"""
re.finditer(pattern, string, flags=0)
搜索字符串,返回一个匹配结果的迭代类型,每个迭代元素是match对象
- pattern: 正则表达式的字符串或原生字符串表示
- string:待匹配字符串
- flags:正则表达式使用时的控制标记
"""
def finditerApiDemo():
    # 返回的是一个列表
    matchIter = re.finditer(r'[1-9]\d{5}', 'shenzhen 518000 shenzhen123456')
    for m in matchIter:
        if m:
           # finditerApiDemo:518000
           # finditerApiDemo:123456
            print("finditerApiDemo:" + m.group(0))

2.6 re.sub(pattern, repl, string, count=0, flags=0)

re.sub(pattern, repl, string, count=0, flags=0)
在一个字符串中替换所有匹配正则表达式的子串,返回替换后的字符串

  • pattern: 正则表达式的字符串或原生字符串表示
  • repl:替换匹配字符串的字符串
  • string:待匹配字符串
  • count:匹配的最大替换次数
  • flags:正则表达式使用时的控制标记
"""
re.sub(pattern, repl, string, count=0, flags=0)
在一个字符串中替换所有匹配正则表达式的子串,返回替换后的字符串
- pattern: 正则表达式的字符串或原生字符串表示
- repl:替换匹配字符串的字符串
- string:待匹配字符串
- count:匹配的最大替换次数
- flags:正则表达式使用时的控制标记

"""
def subApiDemo():
    match = re.sub(r'[1-9]\d{5}', ':sucode', 'shenzhen 518000 shenzhen123456')
    # subApiDemo:shenzhen :sucode shenzhen:sucode
    print("subApiDemo:" + match)

2.7 regex = re.compile(pattern, flags=0)

面向对象使用正则表达式:编译多次调用操作用途
regex = re.compile(pattern, flags=0)
将正则表达式的字符串形式编译程正则表达式对象

  • pattern: 正则表达式的字符串或原生字符串表示
  • flags:正则表达式使用时的控制标记
"""
面向对象使用正则表达式:编译多次调用操作用途
regex = re.compile(pattern, flags=0)
将正则表达式的字符串形式编译程正则表达式对象
- pattern: 正则表达式的字符串或原生字符串表示
- flags:正则表达式使用时的控制标记
"""
def compileApiDemo():
    regex = re.compile(r'[1-9]\d{5}')
    match = regex.search('shenzhen518000')
    if match:
        # compileApiDemo - search:518000
        print('compileApiDemo - search:' + match.group(0))
    match = regex.match('518000shenzhen')
    if match:
        # compileApiDemo - match:518000
        print('compileApiDemo - match:' + match.group(0))

3. 完整示例

3.1 代码

import requests
from bs4 import BeautifulSoup
import bs4
import re

"""
学习笔记:Re 库主要功能函数

笔记的学习视频来源:
https://www.bilibili.com/video/BV1pt41137qK?p=37

正则表达式-Regular expression 简称 RE 
作用:用来简洁表达一组字符串的表达式。达到一行胜千言

一、正则表达式的表示类型
1. raw string 类型(原生字符串类型)
re 库采用 raw string 表示正则表达式,表示为: r'text'
例如:中国大陆的邮政编码正则表达式:r'[1-9]\d{5}'
特点:不包含转义符的字符串的时候使用更方便

2. string类型,例如遇到转移符号 \, 处理起来会更繁琐。
例如:中国大陆的邮政编码正则表达式:[1-9]\d{5}
使用string类型,要对斜杆进行处理,例如双斜杆处理:[1-9]\\d{5}

二、Re 库的主要功能函数
函数            说明
re.search()    在一个字符串中搜索匹配正则表达式的第一个位置,返回match对象
re.match()     从一个字符串的开始位置起匹配正则表达式,返回match对象
re.findall()   搜索字符串,以列表类型返回全部能匹配的字串
re.split()     将一个字符串按照正则表达式匹配结果进行分割,返回列表类型
re.finditer()  搜索字符串,返回一个匹配结果的迭代类型,每个迭代元素是match
re.sub         在一个字符串中替换所有匹配正则表达式的字串,返回替换后的字符串
"""

"""
re.search(pattern, string, flags=0):
- pattern: 正则表达式的字符串或原生字符串表示
- string: 待匹配的字符串
- flags:正则表达式使用时的控制标记(re.I, re.M, re.S)
常用标记                  说明
re.I: re.IGNORECASE    忽略正则表达式的大小写,[A-Z]能够匹配小写字符
re.M: re.MULTILINE     正则表达式中的^操作符能够给定字符串的每行当作匹配的开始。例如匹配一篇文章中的每行
re.S: re.DOTALL        正则表示式的.操作符能够匹配所有字符串,默认匹配出换行外的所有字符串,设置了这个就可以匹配包含换行符的所有了
"""
def searchApiDemo():
    match = re.search(r'[1-9]\d{5}', 'shenzhen 518000')
    if match:
        # 如果匹配到邮政编码,则打印 518000
        print('searchApiDemo:' + match.group(0))

"""
re.match(pattern, string, flags=0)
从一个字符串的开始位置起匹配正则表达式,返回match对象
- pattern: 正则表达式的字符串或原生字符串表示
- string:待匹配字符串
- flags:正则表达式使用时的控制标记
"""
def matchApiDemo():
    match = re.match(r'[1-9]\d{5}', 'shenzhen 518000')
    if match:
        # 无法匹配到
        print('matchApiDemo:' + match.group(0))

    match = re.match(r'[1-9]\d{5}', '518000 shenzhen')
    if match:
        # 从头位置开始就可以了
        print('matchApiDemo:' + match.group(0))

"""
re.findall(pattern, string,flags=0)
搜索字符串,以列表类型返回全部能匹配的字串
- pattern: 正则表达式的字符串或原生字符串表示
- string:待匹配字符串
- flags:正则表达式使用时的控制标记
"""
def findallApiDemo():
    # 返回的是一个列表
    ls = re.findall(r'[1-9]\d{5}', 'shenzhen 518000 shenzhen123456')
    for info in ls:
        print('findallApiDemo:' + info)

"""
re.split(pattern, string, maxsplit=0, flags=0)
将一个字符串按照正则表达式匹配结果进行分割,返回列表类型
- pattern: 正则表达式的字符串或原生字符串表示
- string:待匹配字符串
- maxsplit:最大分割数,剩余部分作为最后一个元素输出
- flags:正则表达式使用时的控制标记
"""
def splitApiDemo():
    # 返回的是一个列表,若将maxsplit设置为1
    ls = re.split(r'[1-9]\d{5}', 'shenzhen 518000 shenzhen123456', 1)
    for info in ls:
        print('split:' + info)

"""
re.finditer(pattern, string, flags=0)
搜索字符串,返回一个匹配结果的迭代类型,每个迭代元素是match对象
- pattern: 正则表达式的字符串或原生字符串表示
- string:待匹配字符串
- flags:正则表达式使用时的控制标记
"""
def finditerApiDemo():
    # 返回的是一个列表
    matchIter = re.finditer(r'[1-9]\d{5}', 'shenzhen 518000 shenzhen123456')
    for m in matchIter:
        if m:
            print("finditerApiDemo:" + m.group(0))

"""
re.sub(pattern, repl, string, count=0, flags=0)
在一个字符串中替换所有匹配正则表达式的子串,返回替换后的字符串
- pattern: 正则表达式的字符串或原生字符串表示
- repl:替换匹配字符串的字符串
- string:待匹配字符串
- count:匹配的最大替换次数
- flags:正则表达式使用时的控制标记

"""
def subApiDemo():
    match = re.sub(r'[1-9]\d{5}', ':sucode', 'shenzhen 518000 shenzhen123456')
    print("subApiDemo:" + match)

"""
面向对象使用正则表达式:编译多次调用操作用途
regex = re.compile(pattern, flags=0)
将正则表达式的字符串形式编译程正则表达式对象
- pattern: 正则表达式的字符串或原生字符串表示
- flags:正则表达式使用时的控制标记
"""
def compileApiDemo():
    regex = re.compile(r'[1-9]\d{5}')
    match = regex.search('shenzhen518000')
    if match:
        print('compileApiDemo - search:' + match.group(0))
    match = regex.match('518000shenzhen')
    if match:
        print('compileApiDemo - match:' + match.group(0))


if __name__ == '__main__':
    searchApiDemo()
    matchApiDemo()
    findallApiDemo()
    splitApiDemo()
    finditerApiDemo()
    subApiDemo()
    compileApiDemo()

3.2 运行结果

C:\Users\珞落\AppData\Local\Programs\Python\Python39\python.exe D:/PythonProject/main.py
searchApiDemo:518000
matchApiDemo:518000
findallApiDemo:518000
findallApiDemo:123456
split:shenzhen 
split: shenzhen123456
finditerApiDemo:518000
finditerApiDemo:123456
subApiDemo:shenzhen :sucode shenzhen:sucode
compileApiDemo - search:518000
compileApiDemo - match:518000

Process finished with exit code 0

  • 3
    点赞
  • 25
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

法迪

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值