使用正则表达式在 c# 中使用字符转义字符串的一部分
Escape parts of string with a character in c# using regex
我有这样的字符串:
/one/two/three-four/five six seven/eight/nine ten eleven-twelve
我需要先用 spaces 替换破折号,然后能够用“#”符号转义任何包含 space 的词组,所以上面的字符串应该是:
/one/two/#three four#/#five six seven#/eight/#nine ten eleven twelve#
我有以下扩展方法,它适用于两个词,但我怎样才能让它适用于任意数量的词。
public static string QueryEscape(this string str)
{
str = str.Replace("-", " ");
return Regex.Replace(str, @"(\w*) (\w*)", new MatchEvaluator(EscapeMatch));
}
private static string EscapeMatch(Match match)
{
return string.Format("#{0}#", match.Value);
}
所以我想我真的需要帮助考虑到正确的正则表达式
- 可以有任意数量的 spaces
- 可能有也可能没有尾部斜杠(“/”)
- 考虑到单词在斜杠之间分组,上面的 #2 除外。
- 破折号是非法的,需要替换为 spaces
提前感谢您的支持。
这应该适合你:
public static string QueryEscape(this string str)
{
return Regex.Replace(str.Replace("-", " "), @"[^/]*(\s[^/]*)+", "#$&#");
}
基本上,这个想法是匹配不是包含 (white-)space 字符的斜线的文本范围。然后在匹配项周围添加井号。
我有这样的字符串:
/one/two/three-four/five six seven/eight/nine ten eleven-twelve
我需要先用 spaces 替换破折号,然后能够用“#”符号转义任何包含 space 的词组,所以上面的字符串应该是:
/one/two/#three four#/#five six seven#/eight/#nine ten eleven twelve#
我有以下扩展方法,它适用于两个词,但我怎样才能让它适用于任意数量的词。
public static string QueryEscape(this string str)
{
str = str.Replace("-", " ");
return Regex.Replace(str, @"(\w*) (\w*)", new MatchEvaluator(EscapeMatch));
}
private static string EscapeMatch(Match match)
{
return string.Format("#{0}#", match.Value);
}
所以我想我真的需要帮助考虑到正确的正则表达式
- 可以有任意数量的 spaces
- 可能有也可能没有尾部斜杠(“/”)
- 考虑到单词在斜杠之间分组,上面的 #2 除外。
- 破折号是非法的,需要替换为 spaces
提前感谢您的支持。
这应该适合你:
public static string QueryEscape(this string str)
{
return Regex.Replace(str.Replace("-", " "), @"[^/]*(\s[^/]*)+", "#$&#");
}
基本上,这个想法是匹配不是包含 (white-)space 字符的斜线的文本范围。然后在匹配项周围添加井号。