当前位置: 首页 > news >正文

正则表达式解析(三)

正则片段如下:

text = re.sub(r"\s+", " ", text)
text = re.sub(r"[^\u4e00-\u9fa5a-zA-Z0-9\s,.!?;:,。?!;:]", " ", text)

这两行代码都使用 Python 的 re.sub() 函数,用于对字符串进行正则表达式匹配和替换。

1. text = re.sub(r"\s+", " ", text)

  • 含义:这行代码将字符串 text 中所有连续的空白字符(如空格、制表符、换行符等)替换为一个单个空格。
  • 详细解释
    • 正则表达式 r"\s+"
      • \s 是一个元字符,表示匹配任何空白字符,包括空格 ( )、制表符 (\t)、换行符 (\n)、回车符 (\r)、垂直制表符 (\v) 和换页符 (\f) 。
      • + 是一个量词,表示匹配前面的元素(即 \s)一次或多次。因此,\s+ 匹配一个或多个连续的空白字符 。
      • 例如,在字符串 "Hello world\n" 中,\s+ 会匹配 " "(三个空格)和 "\n"(换行符)。
    • 替换操作
      • re.sub() 函数将匹配到的所有连续空白字符替换为单个空格 " "
      • 例如,输入 "Hello world\n" 会被替换为 "Hello world "(注意换行符也被替换为空格)。
    • 目的:这用于规范化文本中的空白,减少多余的空白字符,使文本更整洁。这在数据清洗中很常见,例如去除多余空格或换行符 。

2. text = re.sub(r"[^\u4e00-\u9fa5a-zA-Z0-9\s,.!?;:,。?!;:]", " ", text)

  • 含义:这行代码将字符串 text 中所有不属于指定字符集(包括中文字符、英文字母、数字、空白字符及常见中英文标点)的字符替换为一个空格。
  • 详细解释
    • 正则表达式 r"[^\u4e00-\u9fa5a-zA-Z0-9\s,.!?;:,。?!;:]"
      • [] 定义一个字符类,用于匹配方括号内的任何字符。
      • ^ 在字符类开头表示“否定”,即匹配 在指定集合中的任何字符 。
      • 指定字符集包括:
        • \u4e00-\u9fa5:Unicode 范围,匹配所有中文字符(从 U+4E00 到 U+9FA5)。
        • a-zA-Z:匹配所有英文字母(大小写)。
        • 0-9:匹配所有数字。
        • \s:匹配任何空白字符(同上)。
        • ,.!?;::匹配英文常见标点符号(逗号、句号、感叹号、问号、分号、冒号)。
        • ,。?!;::匹配中文常见标点符号(中文逗号、句号、感叹号、问号、分号、冒号)。
      • 因此,整个正则表达式匹配任何 属于上述字符集的字符。例如,符号如 @#$& 或非中英文字符(如日文)都会被匹配。
    • 替换操作
      • re.su b() 将匹配到的所有非法字符替换为单个空格 " "
      • 例如,输入 "Hello@世界!123" 会被替换为 "Hello 世界!123"@ 被替换为空格)。
    • 目的:这用于文本清洗,移除或替换掉不想要的字符(如特殊符号、表情符号、其他语言字符),只保留中英文文本、数字、空白和基本标点。常见于自然语言处理(NLP)的预处理,确保输入数据标准化 。

整体效果和注意事项

  • 整体效果:这两行代码组合使用,先规范化空白字符(第一行),再移除非法字符(第二行)。最终输出是一个“干净”的字符串,只包含中文字符、英文字母、数字、空白和指定标点,多余字符被空格替代。例如:

    • 输入:"Hello 世界!@123\n"(含多余空格、换行符和符号)。
    • 第一行后:"Hello 世界!@123 "(连续空白和换行符被压缩)。
    • 第二行后:"Hello 世界! 123 "@ 被替换为空格)。
  • 注意事项

    • 证据中,re.sub()count 参数默认为 0,表示替换所有匹配项;如果需限制替换次数,可指定 count 值 。
    • 第二行的字符集设计可能不完整(如缺少某些标点),但覆盖了常见需求。Unicode 范围 \u4e00-\u9fa5 是标准中文范围,但可能不包括所有罕见汉字 。
  • 应用场景:常用于文本预处理,如搜索引擎、聊天机器人或数据分析,确保输入文本标准化,提高后续处理(如分词或情感分析)的准确性 。

http://www.dtcms.com/a/330243.html

相关文章:

  • 方法论基础。
  • 与Deepseek对话了解无线电通信知识
  • 自动曝光算法参考
  • Linux Framebuffer(帧缓冲)与基本 UI 绘制技术
  • GitHub宕机时的协作方案
  • 力扣 hot100 Day72
  • Transformer开端
  • 有效涂色问题-二维dp
  • C++进阶之lambda三种回调方式性能差异(四百二十七)
  • 【13】Transformers快速入门:Transformers 分词器 (Tokenizer) 实战?
  • 哈希表之两个数组的交集(leetcode349)
  • 智能合约开发全流程实战指南
  • 【LeetCode】4. 寻找两个正序数组的中位数
  • 芯伯乐300kHz降压DC/DC转换器XBL4005:4.5V~40V宽电压范围,5A大电流高效输出
  • 三伍微电子GSR2406 IoT FEM 2.4G PA 射频前端模组芯片
  • 深入解析C语言嵌套结构体的内存管理与操作实践
  • linux_网络层-ip协议
  • [系统架构设计师]信息安全技术基础知识(三)
  • SpringBoot3+ Elasticsearch8 Spring-data-Elasticsearch使用
  • 多模态数据集分级方案设计与实现
  • 容器基础镜像制作
  • ETLCloud批流一体化体现在哪
  • 【Python】Python 函数基本介绍(详细版)​
  • 版图设计学习2_掌握PDK中的层定义(工艺文档精读)
  • DAY39打卡
  • 【运维进阶】管理变量和事实
  • 哥斯拉--安装、使用
  • graf示教界面技术累积
  • 数据结构摘星题库800题笔记 第2章线性表
  • [TG开发]简单的回声机器人