正则表达式试图找到匹配

时间:2017-07-15 18:36:28

标签: c# regex

我正在尝试匹配VB代码中的赋值字符串(就像我在VB代码中传递的文本一样,用C#编写的程序)。我想要匹配的赋值字符串就像是

CustomClassInitializer(someParameter, anotherParameter, someOtherClassAsParameterWithInitialization()).SomeProperty = 7

我意识到这很复杂,但它实际上与我试图匹配的一些真实文本相差无几。

为了做到这一点,我写了一个正则表达式。这个正则表达式:

@"[\w,.]+\(([\w,.]*\(*,* *\)*)+ = "

正确匹配。问题是它变得非常慢(有超时),我研究和发现可能是因为“回溯”。一般来说,帮助回溯的建议解决方案之一是添加“?>”到正则表达式,我认为将在这个位置:

[\w,.]+\(?>([\w,.]*\(*,* *\)*)+ = 

但这不再匹配。

我对Regex很新,所以我想有一个更好的模式。请问是什么?或者我如何才能改善我的时代?

有用的说明:

  1. 我只对我正在搜索的字符串的位置0感兴趣 匹配。我的代码是“if(isMatch&& match.index == 0){...}。可以 我告诉它只检查位置0,如果它不是一个匹配的移动?
  2. 我使用所有0或更多东西的原因是匹配可以像CustomClass()= new CustomClass()一样简单,并且像上面那样复杂或者可能更糟糕。我试图尽可能多地收集案件。
  3. 这个正则表达式对“[\ w,。] +(”然后“括号内的任何内容”感兴趣“(我试图根据它是有效的VB代码来考虑它们内部的一切)直到你到达右括号然后“=”。也许我可以使用通配符实际上任何东西,直到它在字符串中得到“)=”? - 就像我说的,对Regex来说相当新。
  4. 提前致谢!

1 个答案:

答案 0 :(得分:0)

这似乎做你想要的。通常,我喜欢比。*更具体,但它工作正常。请注意,我使用的是多行选项。

^.*=\s*.+$

这是RegExStorm.net example

中的一个工作示例