【问题标题】:Visual Studio regex replace repeated capturing groupVisual Studio 正则表达式替换重复捕获组
【发布时间】:2013-01-31 17:50:22
【问题描述】:

我正在处理一个相当大的项目 (c#),并且从一个地方到另一个地方,我的 sn-ps 看起来像这样:

((int)foo).ToString() + "," + ((int)bar).ToString() + "," + ((int)zig).ToString() + ...

逗号分隔的字符串具有任意长度(平均范围从 1 到 5,但我不确定是否还有更多)。到目前为止,我能够找到我想要使用的所有事件:

\({.+}\).ToString\(\)( *\+ *"," *\+ *\({.+}\).ToString\(\))*

现在对于每一次出现,我都想用这样的东西替换它:

{ (int)foo, (int)bar, (int)zig , ...}

手动替换每个匹配项是不可行的,是否有替换正则表达式可以完成这项工作?

谢谢

【问题讨论】:

    标签: c# regex visual-studio-2010 replace capturing-group


    【解决方案1】:

    是的,您可以在 Visual Studio 中使用正则表达式进行查找和替换。

    简而言之,您需要为标记表达式使用花括号,并使用\1\2 等重用它们。

    【讨论】:

    • 您好,Ulises,感谢您的回复。这里的挑战是逗号分隔字符串的长度是任意的。我试图用这个正则表达式替换匹配项: \{ \1, \2* \} 但是星号在整数数组中被硬编码。衬里现在看起来像这样: { (int)foo, * }
    • 做 2 次查找和替换,一次用于 ({.+}).ToString(),然后再一次用于 \+ *"," *\+
    • 在 Visual Studio 2012 中,他们将其从花括号更改为组括号,从 \1、\2 更改为 $1 和 $2,这更类似于正常的正则表达式样式。
    【解决方案2】:

    我可能误解了你的问题,但听起来你已经得到了答案……使用System.Text.RegularExpressions.Regex.Replace(string, string)。如果您需要细粒度的控制,请考虑使用名称包装您的捕获:\((?<foo>.+)\)(或使用索引)。使用这些捕获,如果需要,您可以通过循环匹配然后迭代捕获来手动进行替换。

    【讨论】:

    • 您好 RayB64,感谢您的回复。我正在尝试使用 Visual Studio 中的查找和替换工具,并且该项目是用 c# 编写的,而不是使用 c# 来进行查找和替换
    猜你喜欢
    • 2014-08-30
    • 2010-11-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-09-13
    • 2011-03-11
    • 2017-01-07
    相关资源
    最近更新 更多