使用C#替换包括空格在内的所有特殊字符

时间:2014-07-05 04:02:42

标签: c# regex

我希望使用C#替换Special Characters中无法解析的所有URL,包括空格,双空格或任何带有' - '的大空格。

我不想使用System.Web.HttpUtility.UrlEncode之类的任何解析方法。

这该怎么做 ?我想在两个单词之间包含任意数量的空格,只有一个' - '。

例如,如果字符串是Hello# , how are you?
然后,如果最后一个索引是任何特殊字符或空格,则结果应为Hello-how-are-you,否为' - '。

3 个答案:

答案 0 :(得分:1)

 string str = "Hello# , how are you?";
 string newstr = "";
 //Checks for last character is special charact
 var regexItem = new Regex("[^a-zA-Z0-9_.]+");
 //remove last character if its special
 if (regexItem.IsMatch(str[str.Length - 1].ToString()))
 {
   newstr =   str.Remove(str.Length - 1);            
 }
 string replacestr = Regex.Replace(newstr, "[^a-zA-Z0-9_]+", "-");

<强> INPUT: 你好#,你好吗?

<强>输出: 您好,如何-是,你

修改 将它包装在一个类

   public static class StringCheck
        {
            public  static string Checker()
            {
                string str = "Hello# , how are you?";
                string newstr = null;
                var regexItem = new Regex("[^a-zA-Z0-9_.]+");
                if (regexItem.IsMatch(str[str.Length - 1].ToString()))
                {
                    newstr = str.Remove(str.Length - 1);
                }
                string replacestr = Regex.Replace(newstr, "[^a-zA-Z0-9_]+", "-");
                return replacestr;
            }

        }

并像这样打电话,

 string Result = StringCheck.Checker();

答案 1 :(得分:0)

string[] arr1 = new string[] { " ", "@", "&" };

newString = oldString;
foreach repl in arr1
{
    newString= newString.Replace(repl, "-");
}

当然,您可以将所有特殊字符添加到数组中,并循环使用,而不仅仅是&#34; &#34;

有关以下link

的替换方法的更多信息

答案 2 :(得分:0)

您需要两个步骤来删除最后一个特殊字符,并用_替换所有剩余的一个或多个特殊字符

public static void Main()
{
  string str = "Hello# , how are you?";
  string remove = Regex.Replace(str, @"[\W_]$", "");
  string result = Regex.Replace(remove, @"[\W_]+", "-");
  Console.WriteLine(result);
  Console.ReadLine();
}

IDEONE