我在记事本中使用的以下正则表达式几乎适用于所有行,但有一些,我无法使其工作。
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
所有其余部分直至);
非常感谢帮助,我确定我非常接近,但我无法让它发挥作用
答案 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*(?=\))