使用Regex根据条件对字符串进行排序

时间:2015-02-07 09:39:22

标签: c# regex

我需要根据以下条件对字符串进行排序......

这是输入" 100AP12345678"

需要在另一个字符串AP中输出100,在另一个字符串中输出1234567890 ...

我确实喜欢下面

protected void Button1_Click(object sender, EventArgs e)
    {
        var numAlpha = new Regex("(?<Numeric>[0-9]+)(?<Alpha>[a-zA-Z]*)");



        var input=TextBox1.Text;

        var match = numAlpha.Match(TextBox1.Text);

        var Amount = match.Groups["Numeric"].Value;

        var Operator = match.Groups["Alpha"].Value;

        var index = Operator.Substring(Operator.Length - 1);

        var MobileNum = input.Substring(input.IndexOf(index) + 1);

        var kk = numAlpha.Match(MobileNum).Groups["Alpha"].Value;

        if ((Operator.Length > 2) & ((numAlpha.Match(MobileNum).Groups["Alpha"].Value).Length != 0) || (MobileNum.Length > 10))
        {
            Label1.Text = Amount;
            Label3.Text = "invalid MobileNum";
            Label2.Text = "invalid operator";
        }

        else if (((numAlpha.Match(MobileNum).Groups["Alpha"].Value).Length != 0) & (MobileNum.Length > 10))
        {
            Label1.Text = Amount;
            Label2.Text = Operator;
            Label3.Text = "invalid MobileNum";
        }
        else if (Operator.Length > 2)
        {
            Label1.Text = Amount;
            Label2.Text = "invalid operator";
            Label3.Text = MobileNum;
        }
        else
        {
            Label1.Text = Amount;
            Label2.Text = Operator;
            Label3.Text = MobileNum;
        }
    }


第一个charcaters,即数字是卢比,接下来的两个是运营商,剩下的是手机号码

条件:

1.数量没有限制 2.操作员应该是两个字符
3.mobileNum不应超过10

上面的代码很好用

但有两个限制 1.当我从字母表开始传递输入时它不起作用

如ab1001234567890 因为我已经将正则表达式用作数字和字母 第二个限制是 当我通过运算符像aba它没有显示无效的运算符,因为我使用了Substring ..
如果我传递像
的输入,一切都很好 100VD9441239494

这里有两个代码限制

1.如果我通过VD1009441239494无法满足我的要求

  1. 如果我在像Opera这样的歌剧中传递reapareted字符 100VDV9441239494没有得到完美的输出,因为我使用了Substring

3 个答案:

答案 0 :(得分:3)

AS你只有一个例外,因为你说你可以使用try n catch块并运行n测试d代码工作正常

protected void Button1_Click(object sender, EventArgs e)
    {
        try
        {

            var numAlpha = new Regex(@"^(?<Numeric>[0-9]+)(?<Alpha>[a-zA-Z]+)(?<mnum>\d+)$");

            var input = TextBox1.Text;

            var match = numAlpha.Match(TextBox1.Text);

            var Amount = match.Groups["Numeric"].Value;

            var Operator = match.Groups["Alpha"].Value;

                var index = Operator.Substring(Operator.Length - 1);

                var MobileNum = input.Substring(input.IndexOf(index) + 1);


            var kk = numAlpha.Match(MobileNum).Groups["Alpha"].Value;

            if ((Operator.Length > 2) & ((numAlpha.Match(MobileNum).Groups["Alpha"].Value).Length != 0) || (MobileNum.Length > 10))
            {
                Label1.Text = Amount;
                Label3.Text = "invalid MobileNum";
                Label2.Text = "invalid operator";
            }

            else if (((numAlpha.Match(MobileNum).Groups["Alpha"].Value).Length != 0) & (MobileNum.Length > 10))
            {
                Label1.Text = Amount;
                Label2.Text = Operator;
                Label3.Text = "invalid MobileNum";
            }
            else if (Operator.Length > 2)
            {
                Label1.Text = Amount;
                Label2.Text = "invalid operator";
                Label3.Text = MobileNum;
            }
            else
            {
                Label1.Text = Amount;
                Label2.Text = Operator;
                Label3.Text = MobileNum;
            }
        }
        catch(Exception ex)
        {
            Label4.Text = "invalid input";
        }
    }

答案 1 :(得分:0)

你需要使用锚点。

var numAlpha = new Regex(@"^(?<Numeric>[0-9]+)(?<Alpha>[a-zA-Z]+)(?<mnum>\d+)$");

OR

var numAlpha = new Regex(@"^(?<Numeric>[0-9]+)(?<Alpha>[a-zA-Z]{2})(?<mnum>\d{10})$");
  • ^开始
  • \d+一位或多位数。
  • [a-zA-Z]+一个或多个字母。
  • $结束。

答案 2 :(得分:0)

一个符合您标准的正则表达式。 first group会给你卢比,第二组会给你的运营商,第三组会给你手机号码。

\b(\d+)([a-zA-Z]{2})(\d{10})\b

\b - 开始一个单词边界 (\d+) - 将匹配数字(卢比) ([a-zA-Z]{2}) - 将匹配2个字符的运算符 (\d{10}) - 将匹配10位数的电话号码 \b - 单词边界结束。

您可以拥有regex demo here