如何在Notepad++中编写正则提取SSIS三元表达式最外层三部分
Notepad++ 提取最外层三目运算结构正则方案
核心思路
你现有正则的问题在于没有区分括号内的嵌套运算符和最外层分隔符,借助Notepad++支持的boost正则递归匹配能力,我们可以跳过括号内的?和:,只匹配最外层的分隔符。
适用前提
所有嵌套三目运算均被括号包裹(你给出的所有案例均符合该要求),无未加括号的多层三目嵌套写法(如A?B?C:D:E)。
正则方案
整行匹配正则(推荐使用)
直接匹配整行并拆分三个部分,三个捕获组$1/$2/$3分别对应PART_1/PART_2/PART_3:
^((?:[^?()]|\((?1)\))*)\?\s*((?:[^:()]|\((?2)\))*)\s*:\s*(.*)$
单个部分提取正则
如果你需要单独匹配某一个部分,可以使用下面的正则:
- 提取PART_1:
^((?:[^?()]|\((?1)\))*)?,匹配到的第一个捕获组即为结果 - 提取PART_2:
\?\s*((?:[^:()]|\((?1)\))*)\s*:,匹配到的第一个捕获组即为结果 - 提取PART_3:
:\s*(.*)$,匹配到的第一个捕获组即为结果
使用方法
- 打开Notepad++的替换窗口(快捷键
Ctrl+H) - 查找模式选择「正则表达式」,不要勾选「. 匹配新行」选项
- 查找内容填写上面的整行匹配正则,替换为填写对应捕获组即可批量提取:
- 提取所有PART_1:替换为
$1 - 提取所有PART_2:替换为
$2 - 提取所有PART_3:替换为
$3
- 提取所有PART_1:替换为
案例匹配验证
所有你给出的4个测试案例均可以正确拆分:
- 案例2拆分结果:$1=
A>0 && (A>10 ? A : -A),$2=B,$3=C - 案例4拆分结果:$1=
A>0,$2=(A>0 ? 2-B : C),$3=(C>14 ? A*14 : -4)
内容的提问来源于stack exchange,提问作者Nicolaesse
相关产品推荐
相关产品推荐

