1

我知道如何使用 Regex.Split() 和 Regex.Replace(); 但不是如何在替换时保留某些数据。

如果我在 String[] 中有以下几行文本(在每个 ; 之后拆分)

"

using system;
using system.blab;
using system.blab.blabity;

"

例如,我将如何循环并将所有 'using' 替换为 '' 但匹配整行 'using (.+;)'。并得到以下结果(但不仅仅是 Regex.replace("using", "");)"

<using> system;
<using> system.blab;
<using> system.blab.blabity;

"

4

4 回答 4

3

如果 str 是您当前的字符串,则

            string str = @"using system;
            using system.blab;
            using system.blab.blabity;";
            str = str.Replace("using ", "<using> ");
于 2012-12-11T14:29:55.350 回答
2

在正则表达式中使用括号指示引擎将该值存储为一个组。然后当您调用 Replace 时,您可以使用 $n 引用组,其中 n 是组的编号。我没有测试过这个,但是像这样:

Regex.Replace(input, @"^using( .+;)$", "$1");

在这里阅读更多信息

于 2012-12-11T14:30:30.763 回答
1

这应该让你非常接近。您应该为您尝试匹配的每个逻辑项使用一个命名组。在这种情况下,您尝试匹配不是字符串“using”的所有内容。然后,您可以使用符号 ${yourGroupName} 来引用替换字符串中的匹配项。我编写了一个名为RegexPixie的工具,它会在您输入内容时显示您的内容的实时匹配,以便您查看哪些有效,哪些无效。

//the named group has the name "everythingElse"
var regex = new Regex(@"using(?<everythingElse>[^\r\n]+)");
var content = new string [] { /* ... */ };

for(int i = 0; i < content[i]; i++)
{
     content[i] = regex.Replace(content[i], "${everythingElse}");
}
于 2012-12-11T14:32:58.497 回答
0

这结合了两个答案。它环绕单词边界 以执行整个单词搜索,然后在反向引用中捕获正则表达式\busing$1

string str = @"using system;
using system.blab;
using system.blab.blabity;";

str = Regex.Replace(str, @"\b(using)\b", "<$1>");
于 2012-12-11T16:47:20.510 回答