A12345 -> A1 2345
A123456 -> A 123456
123A4567 -> 123A 4567
12345A12345 -> 1234 5A1 2345 ->特别注意
123A12B223C -> 123A12B223C
规则:
字符串从后向前,截取数字,以2为基数进行分割(截取数必须大于4个)
我自已写了一个感觉不是很好,想知道大家有什么好的算法!
A123456 -> A 123456
123A4567 -> 123A 4567
12345A12345 -> 1234 5A1 2345 ->特别注意
123A12B223C -> 123A12B223C
规则:
字符串从后向前,截取数字,以2为基数进行分割(截取数必须大于4个)
我自已写了一个感觉不是很好,想知道大家有什么好的算法!
为什么不是
A123456 -> A1 23456
呢?12345A12345 -> 1234 5A1 2345
123A12B223C -> 123A12B223C 这两条能不能解释一下?你并没有把完整的规则描述出来,何来算法?
12345A12345 -> 1 2345 A1 2345
12345A12345 -> 1234 5A1 2345 ->特别注意
123456A1234 -> 123456 A 1234
1234567A123 -> 123456 7A123
如果开始是数字,且大于连续4位以上是数字则是上面的规则
如果没有连续四位的数字则不进行分割
12345A12345 -> 1234 5A1 2345
上面是什么规则啊?!
12345A12345 -> 1234 5A1 2345
123456A1234 -> 123456 A 1234
第二个为什么不是
123456A1234 -> 1234 56A 1234??另外
A123456 -> A 123456
为什么不是
A123456 -> A1 23456
呢? 你这描述能力
1234567A123 -> 123456 7A123
为什么不是
1234567A123 -> 1 234567 A123
A123456 -> A 123456
那为什么不能:
A12345 -> A 12345这中间的规则是什么?
string pattern = @"(?=\d*4\d*)(\d{2}){2,}|.+?(?=\d*4\d*)(?=(\d{2}){2,}(?!\d))";
Regex regex = new Regex(pattern, RegexOptions.Compiled | RegexOptions.ExplicitCapture);
foreach (string str in strings)
{
Console.Write("\n{0}\t->\t", str);
MatchCollection mc = regex.Matches(str);
if (mc.Count == 0)
{
Console.Write(str);
}
else
{
foreach (Match m in mc)
{
Console.Write("{0} ", m.Value);
}
}
}
Regex reg = new Regex(@"(\d{4}(?:\d{2})*)", RegexOptions.RightToLeft);
foreach (string src in test)
{
richTextBox2.Text += src.PadRight(12, ' ') + "-> ";
foreach (string s in reg.Split(src))
{
richTextBox2.Text += s + " ";
}
richTextBox2.Text += "\n";
}
/*---------输出-----------
A1234 -> A 1234
A12345 -> A1 2345
123A123456 -> 123A 123456
1A1234567 -> 1A1 234567
12A12A2345 -> 12A12A 2345
A1234A12345 -> A 1234 A1 2345
*/