【问题标题】:Issue with Visual Studio find and replace with RegEx?Visual Studio 使用 RegEx 查找和替换的问题?
【发布时间】:2015-08-12 07:56:12
【问题描述】:

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

问题

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

示例

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

正则表达式

我正在使用

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

对于查找和

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

用于替换。

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

有什么想法吗?

【问题讨论】:

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


    【解决方案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 被解释为用于替换每个匹配项的文字字符序列。

    【讨论】:

    • 是的,就是这样。感谢那。我在任何 VS 文档中都找不到任何引用它的内容,但我认为这与它是一个数字的事实有关。
    • 一旦它允许我接受它。你移动得太快了!
    • 很高兴它有效。事实是,当您在反向引用旁边有数字时,您应该始终使用带有 ${n} 的明确表示法。
    猜你喜欢
    • 1970-01-01
    • 2014-12-01
    • 1970-01-01
    • 2010-10-23
    • 2020-02-25
    • 1970-01-01
    • 1970-01-01
    • 2014-10-29
    • 2011-08-23
    相关资源
    最近更新 更多