我有这个正则表达式来测试
(\&TRUNC)[\(]{1,}(.+)[\)]{1,}
我有这个“测试员”
((((&TRUNC((1800,000 / 510)) * 510) * 920) + (2 * (510 * 700)) + ((&TRUNC((1800,000 / 510)) - 1) * 2 * 510 * 80)) / 1000000) * 85,715
我的期望值是(在个人命令“& TRUNC(命令)”内)
(1800,000 / 510)
我得到了这个值
1800,000 / 510)) * 510) * 920) + (2 * (510 * 700)) + ((&TRUNC((1800,000 / 510)) - 1) * 2 * 510 * 80)) / 1000000
如何才能在单独的组中获得预期值?
PS :.命令中的表达式称为“& TRUNC(command)”是可变的。
答案 0 :(得分:1)
在你的正则表达式
(\&TRUNC)[\(]{1,}(.+)[\)]{1,}
更改.+
以使其不贪婪.+?
(\&TRUNC)[\(]{1,}(.+?)[\)]{1,}
你也可以简化一下
&TRUNC\(+(.+?)\)+
答案 1 :(得分:0)
使用SED,您可以使用反向引用来匹配您要查找的文本 -
[jaypal~/Temp]$ cat input_file
((((&TRUNC((1800,000 / 510)) * 510) * 920) + (2 * (510 * 700)) + ((&TRUNC((1800,000 / 510)) - 1) * 2 * 510 * 80)) / 1000000) * 85,715
[jaypal~/Temp]$ sed 's/.[^(&TRUNC)]*(*\&TRUNC((\(.[^*)]*\)))* \* .*/\1/' input_file
1800,000 / 510
抱歉,我不知道.NET,但这个怎么样 -
([\(]{1}[0-9,/ ]+[\)]{1})