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

【前沿技术Trip Three】正则表达式

正则表达式。

一句话概括

正则表达式(Regular Expression,常简写为 regex 或 regexp)是一种用特定模式字符串来匹配、查找、替换文本的强大工具。

你可以把它想象成一种超级增强版的“Ctrl+F”查找功能。它不仅能够查找一个固定的词(比如“hello”),还能定义一个文本模式,用来匹配所有符合这个模式的字符串。

一个生动的比喻

把它比作一个 “通配符”或者“模板”:

• 当你在电脑里搜索文件时,你可能会用 *.jpg 来查找所有的图片文件。这里的 * 就是一个简单的通配符,代表任意字符。

• 正则表达式就是这种思想的超级加强版,它提供了一整套强大而精确的语法,让你能描述极其复杂的文本规则。

它能做什么?

主要有三大功能:

  1. 匹配(Match):判断一个字符串是否符合某个模式。
    ◦ 例如:判断用户输入的邮箱地址格式是否正确。

  2. 查找(Search):在一个长文本中找出所有符合某个模式的片段。
    ◦ 例如:在一篇文章中找出所有的电话号码或日期。

  3. 替换(Replace):将文本中所有符合某个模式的部分替换成其他内容。
    ◦ 例如:将一段文本中所有“TODO”开头的行批量删除,或者将日期格式从 “YYYY-MM-DD” 改为 “MM/DD/YYYY”。

一个简单的例子

假设我们要从一段文本中找出所有手机号码。

中国的手机号码通常是 11 位数字,并且以 1 开头。我们可以用这个正则表达式来匹配它:

/1[3-9]\d{9}/

我们来分解一下这个“模式”:
• 1:表示第一个字符必须是数字 1。

• [3-9]:表示第二个字符可以是 3 到 9 之间的任意一个数字。

• \d:这是一个特殊符号,代表任意一个数字(0-9)。

• {9}:表示前面的 \d 必须连续出现 9 次。

所以,这个模式翻译成白话就是:“以1开头,第二位是3-9,后面跟着任意9个数字”。这就能非常精确地匹配到手机号码。

常用的元字符(构建模式的积木)

正则表达式有一套自己的语法,由一些特殊字符(称为元字符)组成。以下是几个最常用的:

元字符 含义 举例 匹配示例

. 匹配任意单个字符(除了换行符) a.c “abc”, “aac”, “a@c”

\d 匹配一个数字 \d\d “42”, “01”

\w 匹配一个字母、数字或下划线 \w\w “Ab”, “a1”, “_2”

\s 匹配一个空白符(空格、制表符等) a\sb “a b”

[abc] 匹配方括号内的任意一个字符 [aeiou] 匹配任何一个元音字母

[^abc] 匹配除了方括号内字符的任意字符 [^0-9] 匹配任何一个非数字字符

  • 前面的元素出现 0 次或多次 ab*c “ac”, “abc”, “abbc”
  • 前面的元素出现 1 次或多次 ab+c “abc”, “abbc” (不能匹配”ac”)

? 前面的元素出现 0 次或 1 次 colou?r “color”, “colour”

{n} 前面的元素出现恰好 n 次 \d{4} 4位数字,如年份“2023”

^ 匹配字符串的开始位置 ^Hello 匹配以“Hello”开头的字符串

$ 匹配字符串的结束位置 end$ 匹配以“end”结尾的字符串

应用场景

正则表达式无处不在,尤其是在编程和数据处理中:
• 表单验证:验证邮箱、电话、密码强度等。

• 数据抓取(爬虫):从网页源码中提取特定信息(如链接、标题)。

• 文本编辑器(VS Code, Sublime等):进行高级的查找替换。

• 日志分析:从大量日志中筛选出错误信息或特定事件。

• 命令行工具(grep, sed, awk):在Linux/Unix系统中处理文本。

不得不指出,正则表达式在LLM上的使用十分广泛

正则表达式(Regular Expressions)在LLM(大语言模型)的开发和应用中确实有重要应用,但它的角色更像是“辅助工具”而不是核心组件。以下是几个关键的应用场景:

  1. 数据预处理(Data Preprocessing)

LLM训练需要大量高质量的文本数据。正则表达式常用于:
• 清理数据:移除HTML标签、特殊字符、无关的标点等

• 标准化文本:统一日期格式(YYYY-MM-DD)、电话号码、URL等

• 分词(Tokenization)辅助:识别特定模式(如电子邮件、数字等)帮助分词器更好处理
示例:用正则清理文本中的HTML标签
import re
clean_text = re.sub(r’<[^>]+>', ‘’, raw_html_text)

  1. 后处理(Post-processing)

LLM生成的文本可能需要结构化输出,正则表达式可用于:
• 提取信息:从模型输出中抽取日期、金额、关键词等

• 格式校验:确保模型生成的JSON、代码等符合语法
从LLM输出中提取所有日期
dates = re.findall(r’\d{4}-\d{2}-\d{2}', llm_output)

  1. 提示工程(Prompt Engineering)

在构建复杂提示时,正则可以帮助:
• 动态生成提示:从用户输入中提取实体并插入到提示模板中

• 约束输出格式:要求模型按特定格式(如JSON、列表)生成内容,然后用正则验证

  1. 路由和分类(Routing & Classification)

在LLM应用中,正则可以作为轻量级过滤器:
• 意图识别:快速匹配简单用户意图(如"帮我退款"→路由到售后模块)

• 触发特定功能:例如匹配"翻译这句话:"后接文本→调用翻译工具

  1. 安全与合规(Safety & Compliance)

• 过滤敏感信息:用正则掩码电话号码、身份证号等(配合其他技术)

• 检测有害内容:快速匹配已知的不良词汇模式(作为第一道防线)

  1. 工具调用(Function Calling)

当LLM需要调用外部工具/API时,正则可用于:
• 解析参数:从自然语言中提取API所需的参数(如城市名、日期)

• 验证输入:确保参数符合要求(如邮箱格式、数字范围)
从用户查询中提取城市名
user_query = “我想知道北京明天的天气”
city_match = re.search(r’(北京|上海|广州|深圳)', user_query)
if city_match:
city = city_match.group(1)
call_weather_api(city)

为什么正则表达式仍然重要?

尽管LLM能理解自然语言,但正则表达式提供了:
• 精确性:100%匹配特定模式(如电话号码)

• 高效率:比调用LLM更快、更便宜

• 确定性:规则明确,不会产生幻觉

典型工作流:正则 + LLM 协同

现代LLM应用常采用混合架构:

  1. 先用正则处理简单、规则明确的任务
  2. 再用LLM处理需要语义理解的部分
  3. 最后用正则对LLM输出进行格式化和验证

例如客服机器人:
• 用户输入:“我要退款订单号202409171001”

• 正则提取订单号:re.findall(r’订单号(\d+)', input_text)

• LLM生成退款理由:refund_reason = llm.generate(“用户退款原因分析: {input}”)

• 正则验证结果:确保返回格式符合API要求

总结

正则表达式在LLM生态中扮演着数据清洗、模式匹配、格式约束等重要角色,与LLM的能力形成互补。虽然LLM能处理复杂语言任务,但正则表达式在规则明确、需要高效精确处理的场景下仍然是不可或缺的工具。

如何学习和使用?

• 学习:建议从简单的模式开始,理解元字符的含义,多练习。网上有很多交互式学习和测试工具。

• 测试工具:在写复杂的正则时,强烈推荐使用在线测试工具,如 https://regex101.com/ 或 https://regexr.com/。它们可以实时高亮匹配结果,并解释你的正则表达式每一部分的含义,对学习和调试非常有帮助。

总结

正则表达式初看可能像是一堆乱码,但它实际上是一套极其强大且高效的文本处理语言。一旦掌握,它能让你在处理字符串时事半功倍,是程序员和IT从业者的必备技能之一。


文章转载自:

http://P6rzGEme.rLqwz.cn
http://aRpAW5O6.rLqwz.cn
http://Y0r2BFO4.rLqwz.cn
http://ubZvkPzT.rLqwz.cn
http://Fnvja3vU.rLqwz.cn
http://HIibnq4J.rLqwz.cn
http://sTpVmxs1.rLqwz.cn
http://yFenuJvY.rLqwz.cn
http://mOV3xlDU.rLqwz.cn
http://R4bPJe8i.rLqwz.cn
http://DTNCbMcM.rLqwz.cn
http://uWvyDvQH.rLqwz.cn
http://jkfo1zwE.rLqwz.cn
http://z9P14THS.rLqwz.cn
http://Cecyrxw5.rLqwz.cn
http://mCq9xPyQ.rLqwz.cn
http://BO6wdWnC.rLqwz.cn
http://QcCxPOLw.rLqwz.cn
http://czwTUD0P.rLqwz.cn
http://czekFbQx.rLqwz.cn
http://czvHhabM.rLqwz.cn
http://3NBWfRWA.rLqwz.cn
http://yk9JzLkB.rLqwz.cn
http://VCXwIdqL.rLqwz.cn
http://hIx0toOr.rLqwz.cn
http://n7z3LcHU.rLqwz.cn
http://C6w42fjq.rLqwz.cn
http://xp3LbV0E.rLqwz.cn
http://H1LWPCAI.rLqwz.cn
http://6PR7Jppq.rLqwz.cn
http://www.dtcms.com/a/388194.html

相关文章:

  • 多平台数据交换解耦方案选型
  • ​​[硬件电路-239]:从电阻器的高频等效模型,看高频信号的敏感性,电路的性能受到频率的影响较大
  • Java 中的 23 种设计模式详解
  • 《2025年AI产业发展十大趋势报告》六十二
  • 【字节跳动】LLM大模型算法面试题:大模型 LLM的架构介绍?
  • 【C++】类成员访问控制
  • 彩笔运维勇闯机器学习--梯度下降法
  • 正点原子zynq_FPGA学习笔记-vivado安装
  • 基于yolov8/yolo11的视觉识别算法使用和详解
  • 2025年数据科学与大数据技术和统计学有什么区别?
  • STM32H743-ARM例程2-GPIO点亮LED
  • 每天五分钟深度学习:深层神经网络的前向传播算法和反向传播算法
  • 【LeetCode】41. 缺失的第一个正数
  • Linux系统指令之 —— ip route route
  • 嵌入式硬件笔记:三种滤波电路的对比
  • webrtc弱网-InterArrivalDelta类源码分析与算法原理
  • 第6章:计算机内存实战
  • 模型压缩与量化实战:将BERT模型缩小4倍并加速推理
  • RS485 与 CAN 通讯:选哪个更合适?
  • 腾讯微保社招笔试
  • centos系统安装mysql8
  • Go语言垃圾回收器深入解析
  • 大模型的领域知识注入的四种路径
  • 寻找高速传输新选择:当传统方案不再满足现代企业需求
  • (CV方向)视频理解前沿:基于TimeSformer的时空注意力模型实战
  • hot100--简单题(3)
  • STM32开发(TIM定时器:通用定时器 - PWM)
  • 从原始数据到高效模型:基础特征工程的系统指南
  • 大数据场景下时序数据库选型指南,Apache IoTDB的领先技术和实践
  • Charles移动端抓包实战指南:从入门到精通HTTPS流量解析