You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用正则提取COBOL风格Move语句的源与目标字段?

解决COBOL Move语句的正则提取问题

首先,你之前的正则写法存在两个核心问题:

  • 字段匹配的模式错误,(\w\.*)*无法正确匹配Customer.Name这种点分隔的标识符(它会匹配单个单词字符加任意个点,而非“单词+点+单词”的结构)
  • 错误使用正向预查,导致无法定位到目标字段的位置

正确的正则写法

直接通过捕获组分别提取源字段和目标字段,适配COBOL Move语句的格式:

^Move\s+(\w+(?:\.\w+)*)\s+(\w+(?:\.\w+)*)$

正则解释

  • ^ 和 $:限定匹配完整的一行Move语句,避免匹配文本中零散的Move字样
  • Move\s+:匹配关键字Move及其后的一个或多个空白字符
  • 第一个捕获组 (\w+(?:\.\w+)*):匹配源字段,其中:
    • \w+:匹配字段的起始标识符(如Customer)
    • (?:\.\w+)*:非捕获组,匹配可选的“点+标识符”结构(如.Name),支持多层嵌套的字段
  • \s+:匹配源字段与目标字段之间的空白分隔符
  • 第二个捕获组 (\w+(?:\.\w+)*):匹配目标字段,规则与源字段一致

测试效果

对于输入Move Customer.Name New.Name:

  • 捕获组1:Customer.Name(源字段)
  • 捕获组2:New.Name(目标字段)

你的原有正则问题分析

  1. 第一个正则 (?<=Move\s*)(\w\.*)*(?<=.*):
    • (\w\.*)* 模式错误,无法正确匹配点分隔的字段结构
    • 末尾的(?<=.*)是无效的正向预查,没有实际匹配逻辑,也无法帮助定位目标字段
  2. 第二个正则 (?<=Move\s*(\w\.*)*)(\w\.*)*(?<=.*):
    • 正向预查(?<=Move\s*(\w\.*)*)会贪婪匹配到源字段的结尾位置,但预查是零宽度匹配,后续的(\w\.*)*会从预查的位置开始匹配,而此处之后是空白字符,无法匹配目标字段,最终还是只能拿到源字段

内容的提问来源于stack exchange,提问作者Nigel Tunnicliffe

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.25 16:29:59