在VB.Net中有效地替换所有和AndAlso

时间:2017-10-30 18:46:47

标签: regex visual-studio-2015 replace

我的代码是由其他人编写的,并且由于某些条件没有使用NullReferenceException关键字而容易AndAlso

我的目标是使用Visual Studio的正则表达式查找器简单地将所有And替换为AndAlso。我对正则表达式的了解是中间的,但我正在努力构建一个涵盖大多数情况的正则表达式。

以下是要考虑的行案例(✓标记应替换And的行案例):
"" And ""
foo " And "
'foo And
"foo'bar" And
"foo" bar "" And baz
foo "bar" baz " And qux"
"" And " foo " And✓(1)

(1)请注意,包含2个有效And的行也必须正常工作

我想出了这个正则表达式:((?:^|(?: And ))(?:[^"']*(?:"[^"]*")[^"']*)*)( And )

它似乎做了我想要的但你可能已经知道这是非常低效的,它通常导致我的VS在1或2场比赛后挂起。我认为它可能导致灾难性的回溯。

什么样的正则表达式可以有效地完成这项任务?

1 个答案:

答案 0 :(得分:1)

我试图提出一个更简单的模式并建议:

(?<="")( And )|(?<=")( And )(?!.*?\")

实时查看here