Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/304.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

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_String - Fatal编程技术网

C# 使用正则表达式替换字符串

C# 使用正则表达式替换字符串,c#,regex,string,C#,Regex,String,即使文本有一个%20或多个,它也应该有一个字符'-'例如公园 text = "The%20%20%20%20%20%20%20%20%20%20Park" text = "The%20Park" 但是输出应该是公园您非常接近-使用(%20)+表达式匹配一个或多个出现的%20: text = "The%20%20%20%20%20%20%20%20%20%20Park" text = "The%20Park" var regex = new Regex("%20(%20)?"); var ou

即使文本有一个
%20
或多个,它也应该有一个字符
'-'
例如
公园

text = "The%20%20%20%20%20%20%20%20%20%20Park"
text = "The%20Park"

但是输出应该是公园

您非常接近-使用
(%20)+
表达式匹配一个或多个出现的
%20

text = "The%20%20%20%20%20%20%20%20%20%20Park"
text = "The%20Park"
var regex = new Regex("%20(%20)?");
var output = regex.Replace("The%20%20%20%20%20%20%20%20%20%20Park", "-");
output = The----Park


很有可能,单靠正则表达式是不适合这项工作的。字符串看起来是URL编码的,其中
%20
表示空格。在应用查找空白的正则表达式之前,您最好先对字符串进行URL解码。

您非常接近-使用
(%20)+
表达式匹配一个或多个出现的
%20

var regex = new Regex("%20(%20)?");
var output = regex.Replace("The%20%20%20%20%20%20%20%20%20%20Park", "-");
output = The----Park


很有可能,单靠正则表达式是不适合这项工作的。字符串看起来是URL编码的,其中
%20
表示空格。您最好在应用查找空白的正则表达式之前对字符串进行URL解码。

我认为您的正则表达式搞错了

Regex.Replace()

您的正则表达式是
%20(%20)?
,这意味着“一次出现
%20
加上零次或一次出现
%20
”,您可以在字符串中找到其中4次


您应该使用的正则表达式是
(%20)+
,意思是“一次或多次出现
%20

我认为您的正则表达式搞错了

Regex.Replace()

您的正则表达式是
%20(%20)?
,这意味着“一次出现
%20
加上零次或一次出现
%20
”,您可以在字符串中找到其中4次

您应该使用的正则表达式是
(%20)+
,这意味着“一次或多次出现
%20

您的正则表达式
%20(%20)?
匹配
%20
,然后匹配1或0(可选)
%20
子字符串

要匹配零或更多,您需要使用
*
量词-
%20(%20)*
。但是,这等于
(%20)+
,因为
+
匹配量化子模式的一次或多次出现

您还可以对split和join使用非正则表达式方法

请注意,如果您不想在模式中捕获组(未捕获的
(…)
)对,那么最好使用
RegexOptions.ExplicitCapture
)来创建一个堆栈,以保持捕获的值(只是为了蒸汽线匹配一点)。

您的regex
%20(%20)?
匹配
%20
,然后匹配1或0(可选)
%20
子字符串

要匹配零或更多,您需要使用
*
量词-
%20(%20)*
。但是,这等于
(%20)+
,因为
+
匹配量化子模式的一次或多次出现

您还可以对split和join使用非正则表达式方法


请注意,如果您不想在模式中捕获组(未捕获的
(…)
)对,那么最好使用
RegexOptions.ExplicitCapture
)来创建一个堆栈,以保持捕获的值(仅与蒸汽线匹配一点)。

%20(%20)?“
->
%20(%20)*”
->
(%20)+”
@WiktorStribiżew,谢谢它工作得很好。我添加了一个带有解释的答案和一个替代的非正则表达式解决方案。
%20(%20)?“
->
%20(%20)*”
->
“(%20)+”
@WiktorStribiżew,谢谢,它工作得很好。我添加了一个带有解释的答案和一个替代的非正则表达式解决方案。谢谢,这是我的第一个正则表达式构建。它的URL是经过编码的。我需要
-
而不是空格,这样我就可以使用正则表达式了。@sagivasan为了安全起见,我会解码、替换和重新编码。谢谢,这是我第一次构建正则表达式。它的URL是经过编码的。我需要
-
而不是空格,这样我就可以使用正则表达式了。@sagivasan为了安全起见,我会解码、替换和重新编码。