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

正则表达式匹配文本中的编号、属性名及属性值需求

解决从单行文本提取编号、属性及值的正则方案

嘿,我看你之前的正则没匹配成功,问题出在你用了\n(换行符),但你的示例文本是单行的,根本没有换行,所以那些换行符匹配不到自然就失败啦!我给你整理了一套能精准匹配的正则方案,分两步来搞定:

第一步:匹配每个条目(编号+属性块)

先把每个编号和对应的{...}块提取出来,用这个正则:

(\d+\.\d{3})\s*\{\s*(.*?)\s*\}

来拆解下每个部分的作用:

  • (\d+\.\d{3}):捕获编号,匹配1个或多个数字开头,加小数点,再加固定3位数字的格式(比如1.001、2.001)
  • \s*\{\s*:匹配{符号前后的任意空白(空格、制表符都能覆盖),兼容文本里的空格格式
  • (.*?):非贪婪模式捕获{}内部的所有属性内容,避免过度匹配到后面的其他块
  • \s*\}:匹配}符号前后的任意空白

第二步:从属性块中提取单个属性名和值

拿到第一步捕获的属性块内容后,用这个正则来拆分每个键值对:

(\w+)\s*=\s*(.*?);

拆解:

  • (\w+):捕获属性名称(比如position、rotation),\w能匹配字母、数字和下划线,覆盖常见的属性名格式
  • \s*=\s*:匹配等号前后的任意空白,兼容文本里的空格
  • (.*?):非贪婪模式捕获属性值,不管是括号包裹的坐标(0,0,0),还是布尔值False,都能精准捕获到分号前的内容

示例测试

拿你的示例文本测试:

1.001 { position = (0,0,0); rotation = (0.0, 0.0, 0.0, 1.0); } 1.002 { rotation = (0.0, 0.0, 0.0, 1.0); } 2.001 { spawnOnStart = False; }

第一步会捕获到3个条目:

  1. 编号:1.001,属性块内容:position = (0,0,0); rotation = (0.0, 0.0, 0.0, 1.0);
  2. 编号:1.002,属性块内容:rotation = (0.0, 0.0, 0.0, 1.0);
  3. 编号:2.001,属性块内容:spawnOnStart = False;

然后对每个属性块用第二步的正则,就能提取出对应的属性和值啦。

小提示

如果你的文本里可能存在多行的{...}块,只需要把第一步正则里的.*?换成[\s\S]*?,这样就能匹配包含换行的块内容了,通用性更强。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 06:38:52