如何写正则表达式?

时间:2013-02-11 09:23:42

标签: regex

我是一个字符串

SUM(Latest#3)

我已经写了一个常规表达: -

(?:\((?<n>[^\#]+)\#(?<v>[^\)]+)\))

结果很好: -

n:Latest
v:3

但是当我将表达式更改为: -

Sqrt(Sum(Latest#3))

该值将更改为: -

n: sum(Latest)
v: 3

我希望这个表达式检查(的最后一次出现,即上面的表达式(Sqrt(Sum(Latest#3)))的所需输出应该是这样的: -

n:Latest
v:[3]

请帮助我,因为我是新来的重新表达。

2 个答案:

答案 0 :(得分:0)

只需将(添加到否定字符类:

(?:\((?<n>[^(#]+)#(?<v>[^)]+)\))

此外,无需在字符类中转义()#

对于您评论中更复杂的示例,您可以这样做:搜索

(?:\((?<n>[^(#]+)#(?<v>[^,]+)(?<r>,[^)]*)\))

并替换为

([${n}#${v}]${r})

(您可能需要将${n}更改为Expresso用于命名反向引用的任何语法。

答案 1 :(得分:0)

要处理嵌套括号,您需要使用以下正则表达式:

(?:\((?<n>[^\#(]+)\#(?<v>[^\)]+)\))