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

如何用正则按指定特殊字符将字符串分组为组或子组?

正则表达式解决方案:按指定分隔符顺序捕获分组

正确正则表达式

^([^=.^$:#]+)?(\=.*?(?=\.|^\^|^\$|^\:|^\#|$))?(\..*?(?=\^|^\$|^\:|^\#|$))?(\^.*?(?=\$|^\:|^\#|$))?(\$)?(\:)?(\#.*)?$

匹配结果验证

针对测试字符串 First element=Second=Group.Third.Grp^Fourth^Set$:#T1#Test2#B 3,捕获的分组完全符合预期:

  • 组1:First element
  • 组2:=Second=Group
  • 组3:.Third.Grp
  • 组4:^Fourth^Set
  • 组5:$
  • 组6::
  • 组7:#T1#Test2#B 3

原尝试的问题分析

  1. 尝试1:^(.+?)(\=.+)*(\..+)*(\^.+)*(\$)*(\:)*(\#.+)*$
    • 贪婪匹配(\=.+)*会直接吃掉从=开始到字符串末尾的所有内容,导致后续分组(组3-7)无法捕获任何内容。
  2. 尝试2:^(.+?)(\=.+?)*(\..+?)*(\^.+?)*(\$)*(\:)*(\#.+)*$
    • 非贪婪匹配(\=.+?)*没有明确终止边界,会提前停止匹配(比如只捕获=Second),无法完整获取到下一个分隔符(.)之前的全部内容。

正则设计思路

每个分组严格遵循分隔符的固定顺序(= → . → ^ → $ → : → #),通过正向预查明确每个分组的终止边界:

  • 组1:匹配开头到第一个分隔符前的内容,用字符类排除所有分隔符,避免误匹配。
  • 组2-4:以对应分隔符开头,匹配内容直到下一个指定顺序的分隔符或字符串结尾,确保完整捕获当前组的所有内容(包括组内重复的分隔符,比如组2中的=Second=Group)。
  • 组5-6:单独匹配$和:本身,因为这两个分隔符后无需或没有后续内容。
  • 组7:匹配从#开始到结尾的所有内容,支持组内包含多个#。
  • 所有分组后添加?,确保不存在的分组返回空值,符合需求规则。

内容的提问来源于stack exchange,提问作者8平民

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.30 23:47:45