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 的文档形式存储数据,具有高可扩展性、高性能和丰富的功能。 主要特点包括: 灵活的数据模型:文档型数据库允许存储不同…...
【Axure高保真原型】引导弹窗
今天和大家中分享引导弹窗的原型模板,载入页面后,会显示引导弹窗,适用于引导用户使用页面,点击完成后,会显示下一个引导弹窗,直至最后一个引导弹窗完成后进入首页。具体效果可以点击下方视频观看或打开下方…...
条件运算符
C中的三目运算符(也称条件运算符,英文:ternary operator)是一种简洁的条件选择语句,语法如下: 条件表达式 ? 表达式1 : 表达式2• 如果“条件表达式”为true,则整个表达式的结果为“表达式1”…...
系统设计 --- MongoDB亿级数据查询优化策略
系统设计 --- MongoDB亿级数据查询分表策略 背景Solution --- 分表 背景 使用audit log实现Audi Trail功能 Audit Trail范围: 六个月数据量: 每秒5-7条audi log,共计7千万 – 1亿条数据需要实现全文检索按照时间倒序因为license问题,不能使用ELK只能使用…...
【项目实战】通过多模态+LangGraph实现PPT生成助手
PPT自动生成系统 基于LangGraph的PPT自动生成系统,可以将Markdown文档自动转换为PPT演示文稿。 功能特点 Markdown解析:自动解析Markdown文档结构PPT模板分析:分析PPT模板的布局和风格智能布局决策:匹配内容与合适的PPT布局自动…...
C++ 求圆面积的程序(Program to find area of a circle)
给定半径r,求圆的面积。圆的面积应精确到小数点后5位。 例子: 输入:r 5 输出:78.53982 解释:由于面积 PI * r * r 3.14159265358979323846 * 5 * 5 78.53982,因为我们只保留小数点后 5 位数字。 输…...
HTML前端开发:JavaScript 常用事件详解
作为前端开发的核心,JavaScript 事件是用户与网页交互的基础。以下是常见事件的详细说明和用法示例: 1. onclick - 点击事件 当元素被单击时触发(左键点击) button.onclick function() {alert("按钮被点击了!&…...
mysql已经安装,但是通过rpm -q 没有找mysql相关的已安装包
文章目录 现象:mysql已经安装,但是通过rpm -q 没有找mysql相关的已安装包遇到 rpm 命令找不到已经安装的 MySQL 包时,可能是因为以下几个原因:1.MySQL 不是通过 RPM 包安装的2.RPM 数据库损坏3.使用了不同的包名或路径4.使用其他包…...
3-11单元格区域边界定位(End属性)学习笔记
返回一个Range 对象,只读。该对象代表包含源区域的区域上端下端左端右端的最后一个单元格。等同于按键 End 向上键(End(xlUp))、End向下键(End(xlDown))、End向左键(End(xlToLeft)End向右键(End(xlToRight)) 注意:它移动的位置必须是相连的有内容的单元格…...
浪潮交换机配置track检测实现高速公路收费网络主备切换NQA
浪潮交换机track配置 项目背景高速网络拓扑网络情况分析通信线路收费网络路由 收费汇聚交换机相应配置收费汇聚track配置 项目背景 在实施省内一条高速公路时遇到的需求,本次涉及的主要是收费汇聚交换机的配置,浪潮网络设备在高速项目很少,通…...
【VLNs篇】07:NavRL—在动态环境中学习安全飞行
项目内容论文标题NavRL: 在动态环境中学习安全飞行 (NavRL: Learning Safe Flight in Dynamic Environments)核心问题解决无人机在包含静态和动态障碍物的复杂环境中进行安全、高效自主导航的挑战,克服传统方法和现有强化学习方法的局限性。核心算法基于近端策略优化…...
