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