Visual Studio的问题查找并替换为RegEx?

时间:2015-08-12 07:56:13

标签: .net regex visual-studio-2013 replace find

我可能会在这里失去理智,但我使用的正则表达式适用于JavaScript和其他语言,但在VS2013中无效。

问题

我想用新的电话号码查找并替换所有电话号码,并将空格保留在相同的位置。

实施例

当前的电话号码08453333666正在被03035555111取代。该号码可能表示为0845 333 3666,08453 3336 66或任何其他变体。在给出的示例中,我想用相同索引处的空格替换它们,因此0845 333 3666变为0303 555 5111而08453 3336 66变为03035 5551 11.

RegEx

我正在使用

0( *)8( *)4( *)5( *)3( *)3( *)3( *)3( *)6( *)6( *)6

查找和

0$13$20$33$45$55$65$75$81$91$101

替换。

这似乎适用于JavaScript和其他语言,但不能在VS2013中查找和替换文件。

有什么想法吗?

1 个答案:

答案 0 :(得分:1)

您需要在替换中使用${<BACK-REFERENCE_ID>}来表示正确的反向引用:

0${1}3${2}0${3}3${4}5${5}5${6}5${7}5${8}1${9}1${10}1

请参阅demo

关键是正则表达式引擎看到$13并开始寻找第13个捕获的组,并且由于它缺失,因此$13被视为文字。等等。

请参阅Substituting a Numbered Group

  

$后面的所有数字都被解释为属于数字组。如果这不是您的意图,则可以替换命名组。例如,您可以使用替换字符串${1}1代替$11来将替换字符串定义为第一个捕获的组的值以及数字"1"

     

...

     

如果 number 未指定正则表达式模式中定义的有效捕获组,则$number将被解释为用于替换每个匹配的文字字符序列。