我需要根据以下条件对字符串进行排序......
这是输入" 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无法满足我的要求
答案 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。