正则表达式解析(三)

正则片段如下:

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 是标准中文范围,但可能不包括所有罕见汉字 。
  • 应用场景:常用于文本预处理,如搜索引擎、聊天机器人或数据分析,确保输入文本标准化,提高后续处理(如分词或情感分析)的准确性 。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值