胡杨人 發表於 2025-9-5 11:00:48

一篇文章详细讲解正则表达式库和第三方库

<div id="navCategory"><h5 class="catalogue">目录</h5><ul class="first_class_ul"><li><a href="#_label0">一、正则表达式库</a></li><ul class="second_class_ul"><li><a href="#_lab2_0_0">1.匹配字符串</a></li><ul class="third_class_ul"><li><a href="#_label3_0_0_0">match()函数</a></li><li><a href="#_label3_0_0_1">search()函数</a></li><li><a href="#_label3_0_0_2">findall()函数</a></li></ul><li><a href="#_lab2_0_1">2.正则表达式</a></li><ul class="third_class_ul"><li><a href="#_label3_0_1_3">表示字符范围:</a></li><li><a href="#_label3_0_1_4">表示字符出现次数:</a></li><li><a href="#_label3_0_1_5">表示同一类字符:</a></li></ul><li><a href="#_lab2_0_2">3.贪婪模式和非贪婪模式</a></li><ul class="third_class_ul"></ul><li><a href="#_lab2_0_3">4.或和组</a></li><ul class="third_class_ul"></ul><li><a href="#_lab2_0_4">5.sub()和compile()方法</a></li><ul class="third_class_ul"></ul></ul><li><a href="#_label1">二、第三方库</a></li><ul class="second_class_ul"><li><a href="#_lab2_1_5">1.第三方库的介绍</a></li><ul class="third_class_ul"></ul><li><a href="#_lab2_1_6">2.不同领域的第三方库</a></li><ul class="third_class_ul"></ul><li><a href="#_lab2_1_7">3.第三方库的安装</a></li><ul class="third_class_ul"></ul><li><a href="#_lab2_1_8">4.安装报错的解决方法</a></li><ul class="third_class_ul"></ul><li><a href="#_lab2_1_9">5.pip工具的常用命令</a></li><ul class="third_class_ul"></ul><li><a href="#_lab2_1_10">6.Pyinstaller库</a></li><ul class="third_class_ul"><li><a href="#_label3_1_10_6">1.Pyinstaller库的介绍和安装</a></li><li><a href="#_label3_1_10_7">2.使用</a></li><li><a href="#_label3_1_10_8">3.其他Pyinstaller命令</a></li></ul></ul><li><a href="#_label2">总结&nbsp;</a></li><ul class="second_class_ul"></ul></ul></div><p class="maodian"><a name="_label0"></a></p><h2>一、正则表达式库</h2>
<p>正则表达式是一种表达式语句,用于对字符串类型数据进行操作,包含从字符串中筛选出满足表达式条件的信息、将字符串中的内容进行替换等功能,在python语言中用re库实现正则表达式,用import将re库导入代码程序中。</p>
<p class="maodian"><a name="_lab2_0_0"></a></p><h3>1.匹配字符串</h3>
<p class="maodian"><a name="_label3_0_0_0"></a></p><h4>match()函数</h4>
<p>在re模块中,re.match(参数1, 参数2)会尝试从字符串的第一个字符开始匹配指定模式,只有当模式在字符串起始位置完全匹配时才返回参数1的内容,否则返回None。</p>
<p>使用形式:</p>
<div class="jb51code"><pre class="brush:js;">match(参数1,参数2)</pre></div>
<p>示例:</p>
<div class="jb51code"><pre class="brush:js;">import re
# 从起始位置匹配成功​
print(re.match(r'abc', 'abcdef'))#输出为 &lt;re.Match object; span=(0, 3), match='abc'&gt;​
# 非起始位置有匹配但返回None​
print(re.match(r'cde', 'abcdef'))#输出为 None</pre></div>
<p class="maodian"><a name="_label3_0_0_1"></a></p><h4>search()函数</h4>
<p>search()函数的功能是在整个字符串中查找第一个匹配项。search()会从字符串的起始位置开始对比,直到找到第一个符合的子串,然后返回包含匹配成功的信息;如果遍历完整个字符串仍未找到匹配,则返回None。</p>
<p>使用形式:</p>
<div class="jb51code"><pre class="brush:js;">search(参数1,参数2)</pre></div>
<p>示例:</p>
<div class="jb51code"><pre class="brush:js;">import re
# 查找第一个数字序列​
text = '用户ID: 12345, 订单号: 67890'​
match = re.search(r'\d+', text)​
if match:​
    print(f"找到匹配: {match.group()}")# 找到匹配: 12345​
    print(f"匹配位置: {match.span()}")    # 匹配位置: (6, 11)</pre></div>
<p class="maodian"><a name="_label3_0_0_2"></a></p><h4>findall()函数</h4>
<p>使用形式:</p>
<div class="jb51code"><pre class="brush:js;">findall(参数1,参数2)</pre></div>
<p>&nbsp;功能是从参数2(字符串类型数据)中查找满足参数1(正则表达式)的内容,如果匹配了多个参数1,则返回匹配成功的全部信息。</p>
<p>示例:</p>
<div class="jb51code"><pre class="brush:js;">import re
text = '用户A: 13800138000, 用户B: 13900139000, 用户C: 13700137000'
# 提取所有手机号
phones = re.findall(r'1\d{9}', text)
print(phones)# ['13800138000', '13900139000', '13700137000']</pre></div>
<p class="maodian"><a name="_lab2_0_1"></a></p><h3>2.正则表达式</h3>
<p>&nbsp;正则表达式 (Regular Expression) 是一种强大的文本处理工具,它通过定义特定模式来匹配、查找和替换文本。在 Python 中,无论是标准库<code>re</code>还是第三方库<code>regex</code>,都提供了丰富的 API 支持,使开发者能够高效处理各种复杂的文本场景。本文将从基础语法到高级应用,系统介绍 Python 中正则表达式的核心概念、使用技巧及最佳实践。</p>
<p class="maodian"><a name="_label3_0_1_3"></a></p><h4>表示字符范围:</h4>
<div class="jb51code"><pre class="brush:js;"># 匹配a、b或c中的任意一个字符
[^abc] # 匹配除a、b、c之外的任意字符
# 匹配任意小写字母
# 匹配任意大写字母
# 匹配任意数字
# 匹配任意字母或数字</pre></div>
<p class="maodian"><a name="_label3_0_1_4"></a></p><h4>表示字符出现次数:</h4>
<div class="jb51code"><pre class="brush:js;">^      # 匹配字符串的起始位置
$      # 匹配字符串的结束位置
*      # 匹配前面的子表达式零次或多次
+      # 匹配前面的子表达式一次或多次
?      # 匹配前面的子表达式零次或一次
{n}    # 精确匹配n次
{n,}   # 至少匹配n次
{n,m}# 匹配至少n次且最多m次</pre></div>
<p class="maodian"><a name="_label3_0_1_5"></a></p><h4>表示同一类字符:</h4>
<div class="jb51code"><pre class="brush:js;">\d   # 等价于,匹配任意数字
\D   # 等价于[^0-9],匹配任意非数字字符
\s   # 等价于[\t\n\r\f\v],匹配任意空白字符(空格、制表符、换行符等)
\S   # 等价于[^\t\n\r\f\v],匹配任意非空白字符
\w   # 等价于,匹配任意字母、数字或下划线
\W   # 等价于[^a-zA-Z0-9_],匹配任意非字母、数字或下划线字符
a*   # 匹配零个或多个a(如:'', 'a', 'aa', 'aaa'等)
a+   # 匹配一个或多个a(如:'a', 'aa', 'aaa'等)
a?   # 匹配零个或一个a(如:'', 'a')
a{3}   # 精确匹配3个a(如:'aaa')
a{3,}# 匹配至少3个a(如:'aaa', 'aaaa', 'aaaaa'等)
a{3,5} # 匹配3到5个a(如:'aaa', 'aaaa', 'aaaaa')</pre></div>
<p class="maodian"><a name="_lab2_0_2"></a></p><h3>3.贪婪模式和非贪婪模式</h3>
<p>默认情况下,量词是贪婪的,即尽可能多地匹配字符。通过在量词后添加<code>?</code>,可以将其变为非贪婪模式,即尽可能少地匹配字符:</p>
<p>示例:</p>
<div class="jb51code"><pre class="brush:js;">text = '&lt;div&gt;内容&lt;/div&gt;'
# 贪婪匹配(默认)
re.findall(r'&lt;.*&gt;', text)# 结果: ['&lt;div&gt;内容&lt;/div&gt;']
# 非贪婪匹配
re.findall(r'&lt;.*?&gt;', text) # 结果: ['&lt;div&gt;', '&lt;/div&gt;']</pre></div>
<p class="maodian"><a name="_lab2_0_3"></a></p><h3>4.或和组</h3>
<p>在 Python 正则表达式中,&quot;或&quot;和 &quot;组&quot;是构建复杂模式的两大核心机制。&quot;或&quot; 允许在模式中定义多个可选分支,而 &quot;组&quot; 则用于将多个字符作为一个整体处理,并支持捕获匹配内容。</p>
<p>&quot;或&quot; 操作符(|)的用法与特性</p>
<p>在正则表达式中,竖线<code>|</code>用于表示 &quot;或&quot; 关系,允许匹配多个模式中的任意一个。示例:</p>
<div class="jb51code"><pre class="brush:js;">import re
pattern = re.compile(r'apple|banana')# 匹配apple或banana
text = 'I like apple and banana'
print(pattern.findall(text))# ['apple', 'banana']</pre></div>
<p>&nbsp;&quot;或&quot; 操作符的优先级较低,通常需要用括号进行分组以明确匹配范围,多个分支按从左到右的顺序进行匹配,一旦找到匹配项就停止搜索。因此,较长或更具体的模式应放在前面,在字符类<code>[]</code>内部,<code>|</code>表示普通字符而非 &quot;或&quot; 操作符。</p>
<p>&quot;组&quot;的类型与应用</p>
<p>使用<code>()</code>定义的捕获组会保存匹配的子串,可通过索引或名称引用</p>
<p>示例:</p>
<div class="jb51code"><pre class="brush:js;"># 数字索引引用
pattern = re.compile(r'(\d{4})-(\d{2})-(\d{2})')
text = '2023-10-05'
match = pattern.match(text)
print(match.group(1))# '2023'(年)
# 命名组引用
pattern = re.compile(r'(?P&lt;year&gt;\d{4})-(?P&lt;month&gt;\d{2})-(?P&lt;day&gt;\d{2})')
print(match.group('month'))# '10'</pre></div>
<p>多层嵌套时,索引按左括号出现的顺序分配,在模式内部使用<code>\1</code>、<code>\2</code>等语法引用前面的捕获组,使用<code>(?:)</code>定义的非捕获组仅用于分组,不保存匹配结果。</p>
<p class="maodian"><a name="_lab2_0_4"></a></p><h3>5.sub()和compile()方法</h3>
<p><code>sub()</code>用于替换字符串中的匹配项,示例:</p>
<div class="jb51code"><pre class="brush:js;">text = 'Hello 123, World 456'
pattern = re.compile(r'\d+')
print(pattern.sub('NUM', text))# 'Hello NUM, World NUM'</pre></div>
<p><code>compile()</code>是<code>re</code>模块中的核心函数,用于创建预编译的模式对象:</p>
<div class="jb51code"><pre class="brush:js;">import re
# 编译正则表达式
pattern = re.compile(r'正则表达式模式')
# 使用模式对象进行匹配
match = pattern.search('待匹配的文本')</pre></div>
<p class="maodian"><a name="_label1"></a></p><h2>二、第三方库</h2>
<p class="maodian"><a name="_lab2_1_5"></a></p><h3>1.第三方库的介绍</h3>
<p>在 Python 的技术生态中,第三方库是连接基础语法与实际应用的桥梁。这些由全球开发者社区贡献的代码集合,将 Python 的灵活性与扩展性发挥到极致,使其能够轻松应对从简单脚本到复杂系统的各类开发需求。本文将从定义本质、分类体系、技术价值和选择框架四个维度,全面剖析 Python 第三方库的核心特征。</p>
<p>数据科学与分析领域:从采集到可视化的全流程工具</p>
<p>人工智能与机器学习领域:从模型训练到部署的全链路支持</p>
<p>自动化与运维领域:从脚本到系统的效率工具</p>
<p>科学计算与工程领域:从仿真到可视化的专业工具</p>
<p>游戏开发与创意编程领域:从 2D 到 3D 的开发工具</p>
<p class="maodian"><a name="_lab2_1_6"></a></p><h3>2.不同领域的第三方库</h3>
<p>Python 第三方库的生态之所以强大,在于其覆盖了几乎所有技术领域的解决方案。从 Web 开发到人工智能,从数据分析到嵌入式开发,每个领域都形成了各具特色的库集群。本文将深入剖析六大主流领域的核心库,解析其技术特点、适用场景及选型策略,为开发者提供全面的工具选择参考。</p>
<p>Web 开发领域:从后端到前端的全栈工具链​</p>
<p class="maodian"><a name="_lab2_1_7"></a></p><h3>3.第三方库的安装</h3>
<p>常见的有2种:</p>
<p>通过win+r输入cmd打开命令指示符后写入以下形式:</p>
<div class="jb51code"><pre class="brush:ps;">pip install 库名
</pre></div>
<p>&nbsp;但这样通常下载很慢,因为这里用的是外网,可以通过搜索中国网站下载库会快很多。</p>
<p>例如:pip install&nbsp; 库名称 -i https://pypi.tuna.tsinghua.edu.cn/simple</p>
<p>再一种就是通过pycharm的解释器下载第三方库,与上述方法差不多。</p>
<p style="text-align:center"><img alt="" src="https://img.jbzj.com/file_images/article/202509/2025090510353492.png" /></p>
<p>&nbsp;搜索所需要的第三方库,可以在选项中输入中国网站加快下载速度。</p>
<p class="maodian"><a name="_lab2_1_8"></a></p><h3>4.安装报错的解决方法</h3>
<p>1.操作系统缺失支撑软件</p>
<p>解决方法:通过error错误提示下载缺失的支撑软件。</p>
<p>2.计算机的操作系统版本与第三方库的版本之间存在不兼容的情况。</p>
<p>解决方法:使用命令:</p>
<div class="jb51code"><pre class="brush:ps;">pip install 库名 == 版本号</pre></div>
<p>3.pip工具版本过低。</p>
<p>解决方法:通过命令:</p>
<div class="jb51code"><pre class="brush:ps;">python -m pip install --upgrade pip</pre></div>
<p>&nbsp;更新当前pip工具。</p>
<p class="maodian"><a name="_lab2_1_9"></a></p><h3>5.pip工具的常用命令</h3>
<div class="jb51code"><pre class="brush:ps;">pip uninstall 库名 #卸载库
pip list      #列出所有已安装的库
pip show 库名 #查看特定库的详细信息
pip download 库名 #下载第三方库安装包但不安装
-h#获取pip使用帮助</pre></div>
<p class="maodian"><a name="_lab2_1_10"></a></p><h3>6.Pyinstaller库</h3>
<p class="maodian"><a name="_label3_1_10_6"></a></p><h4>1.Pyinstaller库的介绍和安装</h4>
<p>PyInstaller 是一个开源的 Python 库,能够将 Python 脚本打包成独立的可执行文件(.exe、.app 等),无需目标机器安装 Python 解释器或相关依赖库。其工作原理是分析脚本的依赖关系,将 Python 解释器、脚本本身及所有依赖文件打包到一个文件夹或单个可执行文件中,实现 &quot;一次打包,到处运行&quot; 的效果。</p>
<p>打开命令提示符(CMD)或 PowerShell​执行安装命令:</p>
<div class="jb51code"><pre class="brush:ps;"># 使用pip安装最新版本
pip install pyinstaller

# 如需指定版本(例如5.13.2)
pip install pyinstaller==5.13.2</pre></div>
<p class="maodian"><a name="_label3_1_10_7"></a></p><h4>2.使用</h4>
<p>PyInstaller 的命令结构简洁明了,核心语法为:</p>
<div class="jb51code"><pre class="brush:ps;">pyinstaller 代码文件路径+代码文件名</pre></div>
<p class="maodian"><a name="_label3_1_10_8"></a></p><h4>3.其他Pyinstaller命令</h4>
<p>-F:</p>
<p>使打包后只产生一个list文件夹,且文件夹中只存在一个打包后的可执行文件。</p>
<div class="jb51code"><pre class="brush:ps;">pyinstaller -F 代码文件路径+代码文件名</pre></div>
<p>-i:</p>
<p>用于指定可执行文件图标的实用参数,在程序窗口中添加图标。</p>
<div class="jb51code"><pre class="brush:ps;">pyinstaller -i 代码文件路径+代码文件名</pre></div>
<p class="maodian"><a name="_label2"></a></p><h2>总结&nbsp;</h2>
頁: [1]
查看完整版本: 一篇文章详细讲解正则表达式库和第三方库