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为了安全起见,我会解码、替换和重新编码。