4 回答

TA贡献1875条经验 获得超3个赞
using System;
using System.Text.RegularExpressions;
using System.Windows.Forms;
namespace MatchNumDemo
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
string num = this.textBox1.Text;
if (IsNumericAndCkLength(num))
{
if (IsAAAA(num) || IsABCD(num) || IsABAB(num) || IsABAB(num))
{
this.label1.Text = "IsMatch!";
}
else
{
this.label1.Text = "NotMatch!";
}
}
else
{
this.label1.Text = "NotMatch!";
}
}
/// <summary>
/// 由数字组成且长度在[6,8]之间
/// </summary>
/// <param name="num"></param>
/// <returns></returns>
private bool IsNumericAndCkLength(string num)
{
if (string.IsNullOrEmpty(num) || num.Length <= 5 || num.Length >= 9)
{
return false;
}
int numInt;
if (int.TryParse(num, out numInt))
{
return true;
}
else
{
return false;
}
}
//2222
private bool IsAAAA(string num)
{
return Regex.IsMatch(num, @"\d*(\d)\1{3}\d*", RegexOptions.IgnorePatternWhitespace);
}
//2345
private bool IsABCD(string num)
{
bool isAbcd = false;
for (int i = 0; i < num.Length - 4; i++)
{
if (chABCD(num, i))
{
isAbcd = true;
break;
}
}
return isAbcd;
}
private bool chABCD(string num, int idx)
{
int ck = 1;
for (int i = idx; i < num.Length - 1; i++)
{
if (int.Parse(num[i].ToString()) + 1 == int.Parse(num[i + 1].ToString()))
{
ck++;
continue;
}
else
{
break;
}
}
return ck >= 4;
}
//5432
private bool IsDCBA(string num)
{
bool isDcba = false;
for (int i = 0; i < num.Length - 4; i++)
{
if (chDCBA(num, i))
{
isDcba = true;
break;
}
}
return isDcba;
}
private bool chDCBA(string num, int idx)
{
int ck = 1;
for (int i = idx; i < num.Length - 1; i++)
{
if (int.Parse(num[i].ToString()) - 1 == int.Parse(num[i + 1].ToString()))
{
ck++;
continue;
}
else
{
break;
}
}
return ck >= 4;
}
//2626
private bool IsACAC(string num)
{
return Regex.IsMatch(num, @"\d*(\d{2,})\1\d*", RegexOptions.IgnorePatternWhitespace);
}
//2323
private bool IsABAB(string num)
{
bool isAbab = false;
string pattern = @"\d*(\d{2,})\1\d*";
Match m = Regex.Match(num, pattern, RegexOptions.IgnorePatternWhitespace);
if (m.Groups.Count > 0)
{
string matchstr = m.Groups[1].Value;
bool isAb = true;
for (int i = 0; i < matchstr.Length - 1; i++)
{
if (int.Parse(matchstr[i].ToString()) + 1 == int.Parse(matchstr[i + 1].ToString()))
{
continue;
}
else
{
isAb = false;
break;
}
}
isAbab = isAb;
}
return isAbab;
}
//3377
private bool IsAACC(string num)
{
return Regex.IsMatch(num, @"\d*(\d)\1(\d)\2\d*", RegexOptions.IgnorePatternWhitespace);
}
//2233
private bool IsAABB(string num)
{
bool isAabb = false;
string pattern = @"\d*(\d)\1(\d)\2\d*";
Match m = Regex.Match(num, pattern, RegexOptions.IgnorePatternWhitespace);
if (m.Groups.Count >= 1)
{
if (int.Parse(m.Groups[1].Value) + 1 == int.Parse(m.Groups[2].Value))
{
isAabb = true;
}
}
return isAabb;
}
//
}
}

TA贡献1833条经验 获得超4个赞
单独使用正则无法实现,必须结合程序。
正则可以解决像AAAA,ABAB,AABB这种,
比如用(\d)\1{3,7}就可以捕获有连续4位以上同一数字的号码,
但是对于要判断大小的情况就束手无策了。

TA贡献1807条经验 获得超9个赞
用极其肯定的语气告诉你,正则做不到.
请直接写程序实现.
很容易写.
用charAt(0)实现, 比如第一种AAAA
if (s.charAt(0) == s.charAt(1) && s.charAt(0) == s.charAt(2)...){
}
不能用swich 做, 直接用if , 用swich 的话,还得再写个函数返回case.

TA贡献1818条经验 获得超3个赞
\d{4} #AAAA类型
(?:1234|2345|3456|4567|5678|6789) #ABCD类型
(?:4321|5432|6543|7654|8765|9876) #DCBA类型
(?:12|23|34|45|56|67|78|89){2} #ABAB类型
(?:1122|2233|3344|4455|5566|6677|7788|8899) #AABB类型
反正你就是数字判断,这样写的正则就够了
- 4 回答
- 0 关注
- 248 浏览
添加回答
举报