正则表达式来切换值

时间:2016-03-09 15:09:45

标签: regex

我在记事本中使用的以下正则表达式几乎适用于所有行,但有一些,我无法使其工作。

Assert.Equal(false, General.CashFactor.IsHighlighted());
Assert.Equal(values, General.CashFactor.GetValue());
Assert.Equal(int.Parse(General.Time.Hour.GetValue()), this.GetLocalTimeEN(int.Parse(timezone.Timezone2.Zeitverschiebung), int.Parse(hour)));

这是3行,第一次和第二次使用正则表达式,但第3次没有,它的输出总是:

Assert.Equal(int.Parse(hour)), int.Parse(General.Time.Hour.GetValue()), this.GetLocalTimeEN(int.Parse(timezone.Timezone2.Zeitverschiebung)));

以下是我用于

的2个命令

搜索:Assert.Equal\((.*), (.*)(\);)

替换:Assert.Equal\($2, $1\)

现在我需要的是一个命令,$1仅限,$2所有其余部分直至);

非常感谢帮助,我确定我非常接近,但我无法让它发挥作用

1 个答案:

答案 0 :(得分:1)

您可以使用递归模式(处理嵌套括号):

搜索:

\bAssert\.Equal\(\K\h*((?(R)[^()]*(?:\((?1)\)[^()]*)*|[^,()]*(?:\((?1)\)[^(),]*)*))\h*,\h*((?1))\h*(?=\))

替换:

\2, \1

细节:

\bAssert\.Equal\(\K
\h*
(     # first capturing group
    (?(R) # if you are in a recursion (inside parenthesis), commas are allowed
        [^()]*  (?: \( (?1) \) [^()]*  )*
      |   # otherwise not
        [^,()]* (?: \( (?1) \) [^(),]* )*
    )
)
\h*,\h*
((?1)) # second capturing group (the same than the first)
\h*(?=\))

demo