正则表达式匹配孤立组中的特定“值”

时间:2011-11-25 17:46:20

标签: regex

我有这个正则表达式来测试

(\&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)”是可变的。

2 个答案:

答案 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})