正则表达式检查C#代码不起作用

时间:2014-07-22 13:43:34

标签: c# regex

我正在尝试检查代码中是否用逗号分隔各种帐号。代码如下所示:

System.Diagnostics.Debug.WriteLine(billText);

            string input = billText;
            try
            {
                //System.Diagnostics.Debug.WriteLine(input);

                string[] accountsToBill;
                if (Regex.IsMatch(input, "\\d{10}[,]")) 
                {
                    System.Diagnostics.Debug.WriteLine("commas");

                    string[] arr = input.Split(new char[] { ',' }, StringSplitOptions.RemoveEmptyEntries);
                    for (int i = 0; i < arr.Length; i++)
                    {
                        arr[i] = arr[i].Trim();
                    }
                    accountsToBill = arr;
                }
                else if (Regex.IsMatch(input, "\\d{10}[\\s]"))  
                {
                    System.Diagnostics.Debug.WriteLine("whitespace");

                    input = Regex.Replace(input, @"\s+", " ");
                    string[] arr = input.Split(new char[] { ' ' }, StringSplitOptions.RemoveEmptyEntries);
                    for (int i = 0; i < arr.Length; i++)
                    {
                        arr[i] = arr[i].Trim();
                    }
                    accountsToBill = arr;
                }

等等......我检查了输入并且它不是空的但是由于某种原因代码不会进入第一个if ..我使用的标准输入是用逗号分隔的10位数字。

2 个答案:

答案 0 :(得分:1)

您不应该使用正则表达式进行非常简单的字符串检查。他们的开销很大。在您提供的情况下,我没有看到使用RegEx。简单的字符串函数可用于实现您的目标。

如果分割器中哪个字符(逗号或空格)并不重要,并且您想将它们视为分割字符,则可以使用一行轻松替换整个代码:

string[] accountsToBill = input.Split(", ".ToCharArray, StringSplitOptions.RemoveEmptyEntries);

否则,通过使用String.Contains函数进行比较,您仍然可以在没有RegEx的情况下执行此操作:

string[] accountsToBill;
if (input.Contains(",")) {
    accountsToBill = input.Split(",".ToCharArray, StringSplitOptions.RemoveEmptyEntries);
} else if (input.Contains(" ")) {
    accountsToBill = input.Split(" ".ToCharArray, StringSplitOptions.RemoveEmptyEntries);
}

答案 1 :(得分:0)

你的正则表达式似乎有些偏差。我已经改写了它们。

//sample input = 0123456789,0123456789,0123456789
if (Regex.IsMatch(input, @"\d{10},"))
{
    Console.WriteLine("comma");
}
else if (Regex.IsMatch(input, @"\d{10}\s"))
{
    Console.WriteLine("White space");
}