Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 匹配和替换字符串中的文本,同时保留未替换的文本_C#_Regex - Fatal编程技术网

C# 匹配和替换字符串中的文本,同时保留未替换的文本

C# 匹配和替换字符串中的文本,同时保留未替换的文本,c#,regex,C#,Regex,我知道如何使用Regex.Split()和Regex.Replace();但不是如何在更换时保留某些数据 如果我在字符串[]中有以下几行文本(在每行之后拆分;) " " 例如,我如何循环槽并替换所有“using”到“”,但匹配整行“using(+;)”。 并以以下内容结束(但不仅仅是Regex.replace(“使用“,”);) " 系统; system.blab; 系统布拉比提; “如果str是您当前的字符串,则 string str = @"using system

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

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

"

"

例如,我如何循环槽并替换所有“using”到“”,但匹配整行“using(+;)”。 并以以下内容结束(但不仅仅是Regex.replace(“使用“,”);) "

系统;
system.blab;
系统布拉比提;

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

            string str = @"using system;
            using system.blab;
            using system.blab.blabity;";
            str = str.Replace("using ", "<using> ");
stringstr=@”使用系统;
使用system.blab;
使用system.blab.blabity;“;
str=str.Replace(“使用“,”);

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

            string str = @"using system;
            using system.blab;
            using system.blab.blabity;";
            str = str.Replace("using ", "<using> ");
stringstr=@”使用系统;
使用system.blab;
使用system.blab.blabity;“;
str=str.Replace(“使用“,”);

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

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

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

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

这会让你离得很近。您应该为尝试匹配的每个逻辑项使用命名组。在本例中,您试图匹配所有不是字符串“using”的内容。然后可以使用符号${yourGroupName}引用替换字符串中的匹配项。我写了一个名为的工具,它可以在你打字的时候显示你的内容的实时匹配,这样你就可以看到哪些有效,哪些无效

//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}");
}
//命名组的名称为“everythingElse”
var regex=new regex(@“使用(?[^\r\n]+)”);
var content=newstring[]{/*…*/};
for(int i=0;i
这应该会让你非常接近。您应该为尝试匹配的每个逻辑项使用命名组。在本例中,您试图匹配所有不是字符串“using”的内容。然后可以使用符号${yourGroupName}引用替换字符串中的匹配项。我写了一个名为的工具,它可以在你打字的时候显示你的内容的实时匹配,这样你就可以看到哪些有效,哪些无效

//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}");
}
//命名组的名称为“everythingElse”
var regex=new regex(@“使用(?[^\r\n]+)”);
var content=newstring[]{/*…*/};
for(int i=0;i
这是两个答案的组合。它将
\b
包装在
周围,使用
执行纯单词搜索,然后在反向引用中捕获正则表达式
$1

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

str = Regex.Replace(str, @"\b(using)\b", "<$1>");
stringstr=@”使用系统;
使用system.blab;
使用system.blab.blabity;“;
str=Regex.Replace(str,@“\b(使用)\b)”,“”);

这是两个答案的组合。它将
\b
包装在
周围,使用
执行纯单词搜索,然后在反向引用中捕获正则表达式
$1

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

str = Regex.Replace(str, @"\b(using)\b", "<$1>");
stringstr=@”使用系统;
使用system.blab;
使用system.blab.blabity;“;
str=Regex.Replace(str,@“\b(使用)\b)”,“”);

这是最简单的答案,正则表达式的答案有点难读,但如果您需要,可以提供更多。谢谢Davio。KISS principleWell当然,它还将替换搜索字符串中其他位置出现的“
”随机文本,但我不知道这在实践中是否会出现问题。像
int-usingInt=1
这样的随机表达式将被更改为
int-int=1
。是的。但它看起来像是一些C类使用Station exporter之类的东西,他正在做的事情。这是最简单的方法,但当然这只是我正在排序的一小块数据,并将替换不应该做的东西替换。这是最简单的答案,正则表达式的答案有点难读,但是如果你需要的话,可以提供更多。谢谢Davio。KISS principleWell当然,它还将替换搜索字符串中其他位置出现的“
”随机文本,但我不知道这在实践中是否会出现问题。像
int-usingInt=1
这样的随机表达式将被更改为
int-int=1
。是的。但它看起来像是一些C类使用Station exporter之类的东西,他正在做的事情。这是最简单的方法,但当然这只是我正在排序的一小块数据,并将替换不应该做的东西被替换。你不应该在“未结束”部分后出现偏执吗?你不应该在“未结束”部分后出现偏执吗部分?第一个代码块是预期的输入,第二个代码块是预期的输出吗?第一个代码块是预期的输入,第二个代码块是预期的输出吗?这是可行的,但我没有选择这一点作为答案,因为上面的一个更容易阅读,特别是当你需要保留不同的内容时间隔。这是可行的,但我没有选择这个作为答案,因为上面的一个是非常有活力的,它更容易阅读,特别是当你需要保持不同的东西间隔的时候。