python爬虫 - 进阶正则表达式
🌈个人主页:https://blog.csdn.net/2401_86688088?type=blog
🔥 系列专栏:https://blog.csdn.net/2401_86688088/category_12797772.html

目录
前言
一、匹配中文
(一)匹配单个中文字符
(二)匹配多个连续的中文字符
(三)匹配中英文混合的文本中的中文字符
(四)匹配中文标点符号
(五)匹配中文字符和标点符号
(六)匹配所有 CJK (中文、日文、韩文) 字符
(七)匹配不包括中文的部分
(八)匹配中文总结
二、贪婪与非贪婪模式
(一)贪婪模式
(二)非贪婪模式
(三)贪婪与非贪婪小结
三、总结
前言
正则表达式是一种强大的工具,可以帮助我们在文本处理中灵活高效地匹配、查找、替换各种字符和字符串模式。对于中文字符的处理,正则表达式尤其有用,因为它可以通过 Unicode 范围直接匹配常用的汉字及标点符号。此外,正则表达式中的贪婪和非贪婪模式提供了不同的匹配策略,使我们能够更灵活地控制匹配的长度和范围。这篇文章将通过一些示例介绍如何使用正则表达式匹配中文字符,以及如何利用贪婪和非贪婪模式进行不同方式的匹配。
一、匹配中文
正则表达式可以用来匹配各种字符,包括中文字符。匹配中文字符的核心是利用 Unicode 字符集中的中文范围。在正则表达式中,中文字符的匹配一般使用字符范围 [\u4e00-\u9fa5],其中 \u4e00 到 \u9fa5 是 Unicode 中常见中文字符的范围。
(一)匹配单个中文字符
要匹配单个中文字符,可以使用 [\u4e00-\u9fa5],它表示匹配一个中文字符。
示例:
import re
text = "这是一个测试"
# 匹配单个中文字符
result = re.findall(r'[\u4e00-\u9fa5]', text)
print(result) # 输出: ['这', '是', '一', '个', '测', '试']
(二)匹配多个连续的中文字符
如果你想匹配多个连续的中文字符,可以使用 [\u4e00-\u9fa5]+,它表示匹配一个或多个连续的中文字符。
示例:
import re
text = "这是一个测试"
# 匹配多个连续的中文字符
result = re.findall(r'[\u4e00-\u9fa5]+', text)
print(result) # 输出: ['这是一个测试']
(三)匹配中英文混合的文本中的中文字符
在处理包含中英文混合的文本时,可以用正则表达式只提取中文字符。
示例:
import re
text = "This is a test. 这是一个测试。"
# 匹配所有中文字符
result = re.findall(r'[\u4e00-\u9fa5]+', text)
print(result) # 输出: ['这是一个测试']
(四)匹配中文标点符号
除了汉字,中文标点符号也有专门的 Unicode 范围。要匹配中文标点符号,可以使用 [\u3000-\u303F] 这个范围。
示例:
import re
text = "你好,世界!这是一个测试。"
# 匹配中文标点符号
result = re.findall(r'[\u3000-\u303F]', text)
print(result) # 输出: [',', '!', '。']
(五)匹配中文字符和标点符号
如果要同时匹配中文字符和中文标点,可以将这两部分结合在一起。例如,使用 [\u4e00-\u9fa5\u3000-\u303F]+ 来匹配。
示例:
import re
text = "你好,世界!这是一个测试。"
# 匹配中文字符和中文标点
result = re.findall(r'[\u4e00-\u9fa5\u3000-\u303F]+', text)
print(result) # 输出: ['你好', ',', '世界', '!', '这是一个测试', '。']
(六)匹配所有 CJK (中文、日文、韩文) 字符
如果要匹配所有 CJK(中日韩)字符,可以使用 Unicode 字符集中的范围 [\u4e00-\u9FFF]。
示例:
import re
text = "中文, 한국어, 日本語"
# 匹配所有 CJK 字符
result = re.findall(r'[\u4e00-\u9FFF]+', text)
print(result) # 输出: ['中文', '한국어', '日本語']
(七)匹配不包括中文的部分
可以使用反向匹配来排除中文部分。例如,匹配非中文字符的部分,可以使用 [^ \u4e00-\u9fa5]+。
示例:
import re
text = "这是1234一个测试test。"
# 匹配非中文的字符
result = re.findall(r'[^ \u4e00-\u9fa5]+', text)
print(result) # 输出: ['1234', 'test']
(八)匹配中文总结
正则表达式通过 Unicode 范围可以轻松匹配中文字符。使用 [\u4e00-\u9fa5] 匹配常用汉字字符,同时可以通过调整范围和组合来匹配标点符号、CJK 字符以及中英文混合的内容。通过合理使用这些技巧,你可以在文本处理和解析过程中高效地提取和操作中文字符。
二、贪婪与非贪婪模式
在 Python 中,正则表达式的贪婪和非贪婪模式控制了匹配时字符的数量:
(一)贪婪模式
贪婪模式会尽可能多地匹配字符,直到整个表达式不再匹配为止。默认情况下,Python 正则表达式是贪婪的,即量词(如 *、+、{m,n})会尝试匹配尽可能多的字符。
常见的贪婪量词:
-
*:匹配前面的字符 0 次或多次 -
+:匹配前面的字符 1 次或多次 -
{m,n}:匹配前面的字符至少 m 次,至多 n 次
示例:
import retext = "abc123abc456"
result = re.search(r'a.*c', text)
print(result.group()) # 输出:abc123abc
在上面的示例中,.* 是贪婪匹配,会尽可能多地匹配字符,直到最后一个 c,因此匹配了 "abc123abc"。
(二)非贪婪模式
非贪婪模式,也称为惰性匹配,会尽可能少地匹配字符。你可以在贪婪量词后加上一个 ? 来实现非贪婪匹配。例如:*?、+?、{m,n}?。
非贪婪量词:
-
*?:匹配前面的字符 0 次或多次,但尽可能少地匹配 -
+?:匹配前面的字符 1 次或多次,但尽可能少地匹配 -
{m,n}?:匹配前面的字符至少 m 次,至多 n 次,但尽可能少地匹配
示例:
import retext = "abc123abc456"
result = re.search(r'a.*?c', text)
print(result.group()) # 输出:abc
在上面的示例中,.*? 是非贪婪匹配,它会尽可能少地匹配字符,所以它匹配了 "abc"(第一个 a 到第一个 c 之间的内容)。
(三)贪婪与非贪婪小结
-
贪婪模式:默认模式,会尽可能多地匹配字符。
-
非贪婪模式:通过
?将贪婪量词转换为非贪婪,会尽可能少地匹配字符。 -
常见的用法是通过在量词后添加
?,如*?或+?来启用非贪婪模式。
三、总结
通过本文的介绍,我们可以看到正则表达式在处理中文字符时的强大能力。从匹配单个或多个汉字,到捕获中英文混合文本中的中文部分,再到提取特定的中文标点符号,正则表达式都能轻松应对。同时,掌握贪婪和非贪婪模式的差异可以帮助我们在匹配字符时更加精准。在文本解析和数据清理任务中,熟练运用这些正则表达式技巧将为我们带来极大的便利和效率。
相关文章:
python爬虫 - 进阶正则表达式
🌈个人主页:https://blog.csdn.net/2401_86688088?typeblog 🔥 系列专栏:https://blog.csdn.net/2401_86688088/category_12797772.html 目录 前言 一、匹配中文 (一)匹配单个中文字符 (二…...
静态路由和nqa 联动实验
nqa 配置 1 test 断端口 很明显是切换到备机上了...
golang用any类型去接收前端传的数字类型的值,类型断言为float64
在 Go 中,使用 any 类型接收前端传来的数字时,通常会发现其被类型断言为 float64。这是因为在 JSON 解码的过程中,Go 的 encoding/json 包会将数字解析为 float64。但如果你在结构体中指明字段为 int 类型,框架会根据字段类型进行…...
5、Spring Boot 3.x 集成 RabbitMQ
一、前言 本篇主要是围绕着 Spring Boot 3.x 与 RabbitMQ 的集成,这边文章比较简单,RabbitMQ 的集成没有太大的变化,这篇文章主要是为了后续的 RabbitMQ 的动态配置做铺垫。 1、Docker 安装 RabbitMQ 2、Spring Boot 3.x 集成 RabbitMQ二、D…...
ENSP搭建基础网络拓扑图
一、ENSP的基本操作 1、配置网关 进入系统视图与退出 <Huawei>system-view [Huawei]quit 进入G0/0/0接口后配置ip [R1]interface GigabitEthernet 0/0/0 [R1-GigabitEthernet0/0/0]ip address 192.168.1.1 24查询所有接口的ip配置 [R1]display ip interface brief…...
尚硅谷rabbitmq 2024 消息可靠性答疑二 第22节
returnedMessage()只有失败才调用,confirm()成功失败了都会调用,为什么? 在RabbitMQ中,消息的确认和返回机制是为了确保消息的可靠传递和处理。confirm和returnedMessage方法的调用时机和目的不同,因此它们的行为也有…...
在 Ubuntu 上安装 Whisper 支撑环境(ffmpeg、PyTorch)的教程(2024亲测可用)
在 Ubuntu 上安装 Whisper 的教程 以下是如何在 Ubuntu 系统上安装 Whisper 以进行视频转录的详细步骤。 步骤 1:更新系统 首先更新你的 Ubuntu 系统,确保安装最新的软件包: sudo apt update && sudo apt upgrade -y步骤 2&#…...
vue+echarts实现雷达图及刻度标注
文章目录 前言代码实现实现效果总结 前言 最近项目有做数据可视化 大屏 不免再次使用些echarts应用 记录下其中echarts雷达图的实现 代码实现 先上代码 <template><div class"container"><div ref"chart" style"width: 500px; heig…...
【进阶OpenCV】 (9)--摄像头操作--->答题卡识别改分项目
文章目录 项目:答题卡识别改分1. 图片预处理2. 描绘轮廓3. 轮廓近似4. 透视变换5. 阈值处理6. 找每一个圆圈轮廓7. 将每一个圆圈轮廓排序8. 找寻所填答案,比对正确答案8.1 思路8.2 图解8.3 代码体现 9. 计算正确率 总结 项目:答题卡识别改分 …...
实时从TDengine数据库采集数据到Kafka Topic
实时从TDengine数据库采集数据到Kafka Topic 一、认识TDengine二、TDengine Kafka Connector三、什么是 Kafka Connect?四、前置条件五、安装 TDengine Connector 插件六、启动 Kafka七、验证 kafka Connect 是否启动成功八、TDengine Source Connector 的使用九、添…...
Linux -- 初识动静态库
目录 为什么要有库? 静态库 什么是静态库? 特点 优点 缺点 动态库 什么是动态库? 优点 缺点 编译器会选择哪个库? 为什么要有库? 库的存在是为了提高软件开发的效率、促进代码复用以及简化维护工作。通过使用…...
vite 打包前请求接口和打包后的不一致
在使用 Vite 进行项目打包时,如果发现打包前请求接口和打包后的行为不一致,这可能是由于多种原因导致的。以下是一些可能的原因和相应的解决方案: 1. 代理配置问题 开发环境:在开发环境中,Vite 通常使用 vite.config…...
fairseq 安装包python
背景: Collecting fairseq Using cached https://pypi.tuna.tsinghua.edu.cn/packages/d7/0f/b7043b451a97eb9b4cfb1b1e23e567b947d9d7bca542403228bd53b435fe/fairseq-0.12.1.tar.gz (9.6 MB) Installing build dependencies ... done Getting requirements…...
使用Mockaroo生成测试数据
使用Mockaroo生成测试数据 最近在学习【Spring Boot & React】Spring Boot和React教程视频的P51.Generating 1000 students一课中,看到了https://www.mockaroo.com/网站可以用来模拟生成测试数据,觉得还不错,特此记录一下。感觉每次看老…...
使用频率最高的 opencv 基础绘图操作 - python 实现
以下是 opencv-python 基本操作绘制示例,绘制: 1)圆,2)矩形,3)线段,4)文本。 安装 opencv-python pip install opencv-python 在图上绘制圆的操作,示例如…...
Python 在Excel中添加数据条
在Excel中添加数据条是一种数据可视化技巧,它通过条形图的形式在单元格内直观展示数值的大小,尤其适合比较同一列或行中各个单元格的数值。这种表示方式可以让大量的数字信息一目了然。本文将介绍如何使用Python在Excel中的指定单元格区域添加数据条。 …...
Unity中搜索不到XR Interaction Toolkit包解决方法
问题: 针对Unity版本2020.3在中PackageManager可能搜素不到XR Interaction Toolkit包 在Package Manager中未显示XR Interaction Toolkit包 解决方法: Package manager左上角,点加号,选择 Add package from git URL..,…...
【前端】JQ验证每个单选按钮是否已经选择
验证每个单选题是否都已经选择,其中每个input中不带name值,直接遍历input[type"radio"]验证 <!DOCTYPE html> <html lang"en"> <head> <meta charset"UTF-8"> <meta name"viewpor…...
【无人机设计与控制】滑模控制、反步控制、传统PID四旋翼无人机轨迹跟踪控制仿真
摘要 本文基于滑模控制、反步控制和传统PID控制,设计了针对四旋翼无人机的轨迹跟踪控制系统。通过对比这三种控制策略在四旋翼无人机轨迹跟踪中的表现,分析了各自的优缺点和适用场景。仿真结果表明,滑模控制具有更强的鲁棒性,反步…...
MongoDB 介绍
一、MongoDB 介绍 MongoDB 是一个开源的、面向文档的数据库管理系统。它采用了灵活的数据模型,以类似 JSON 的文档形式存储数据,具有高可扩展性、高性能和丰富的功能。 主要特点包括: 灵活的数据模型:文档型数据库允许存储不同…...
OLAP] DuckDB : 开源免费的、面向嵌入式场景、列式存储的分析型数据库
0 序 DuckDB 是近期非常火的一款 AP 数据库,其独特的定位很有趣。甚至有数据库产品考虑将其纳入进来,作为分析能力的扩展。 考虑到项目中一个数据处理场景,就此调研一二。 DuckDB 的爆火,也给所有盲目追逐“大数据”的技术人敲响…...
别再手动点灯了!用Simulink串口实时控制STM32,5分钟搞定双向通信
基于Simulink与STM32的实时双向通信实战指南 在嵌入式系统开发中,快速原型验证是提升效率的关键环节。传统开发模式下,工程师需要花费大量时间编写底层通信协议、调试硬件接口,而真正核心的控制算法验证反而被边缘化。本文将介绍一种高效开发…...
Claude技能开发实战指南:从入门到精通的认知升级路径
Claude技能开发实战指南:从入门到精通的认知升级路径 【免费下载链接】awesome-claude-skills A curated list of awesome Claude Skills, resources, and tools for customizing Claude AI workflows 项目地址: https://gitcode.com/GitHub_Trending/aw/awesome-…...
STM32 PWR电源管理与低功耗模式实战指南
1. STM32电源管理基础与实战意义 在嵌入式系统开发中,电源管理往往是最容易被忽视却至关重要的环节。想象一下你的智能手环如果每天都需要充电,或者无线传感器节点每隔几小时就要更换电池,这样的产品显然缺乏实用价值。STM32的PWR模块正是为解…...
Aurix TC397内存不够用?三种方法教你手动指定变量到LMU或DSRR地址空间
Aurix TC397内存优化实战:精准分配变量到LMU与DSRR的三大策略 当你在Aurix TC397项目开发中遇到"PSPR空间不足"的报错时,那种突如其来的编译中断感就像赛车手在弯道突然失去动力。这款强大的多核微控制器虽然配备了PSRR、DSRR、DLMU、LMU等多…...
一套万能的异步处理方案!(珍藏版)
前言 良好的系统设计必须要做到开闭原则,随着业务的不断迭代更新,核心代码也会被不断改动,出错的概率也会大大增加。但是大部分增加的功能都是在扩展原有的功能,既要保证性能又要保证质量,我们往往都会使用异步线程池…...
不止于超市:用QGIS缓冲区+叠置分析,为你的奶茶店、自习室找个好位置
从奶茶店到自习室:QGIS空间分析赋能小微商业选址决策 走在街头,你是否好奇为什么某些奶茶店总是门庭若市,而几步之隔的同类店铺却冷冷清清?商业选址从来不是简单的"地段好"三个字能概括的。对于资金有限的小微创业者来说…...
从静态到动态:开源AI视频生成工具如何用3分钟改变你的创作方式
从静态到动态:开源AI视频生成工具如何用3分钟改变你的创作方式 【免费下载链接】stepvideo-ti2v 项目地址: https://ai.gitcode.com/StepFun/stepvideo-ti2v 在AI技术日新月异的今天,视频创作正经历着一场前所未有的革命。阶跃星辰推出的Step-Vi…...
3个核心功能让Windows优化变得如此简单:Winhance中文版深度体验
3个核心功能让Windows优化变得如此简单:Winhance中文版深度体验 【免费下载链接】Winhance-zh_CN A Chinese version of Winhance. C# application designed to optimize and customize your Windows experience. 项目地址: https://gitcode.com/gh_mirrors/wi/Wi…...
AI 卖课博主年赚 120 万?原本我想打假,算完账我破防了
AI 卖课博主年赚 120 万?原本我想打假,算完账我破防了 大家好,我是马彪。 昨天晚上刷到一个博主,说自己一年赚了120万,其中90万来自卖课,才5万粉丝。我想这不扯淡呢吗,肯定又是吹牛想割韭菜。 现…...
