110,566
社区成员
发帖
与我相关
我的任务
分享
031007FFFF0C10 031007FFFF0F11 031007FF030C10031007FFFF0C10 03 1007 FF FF0C10 031007FFFF0C10 03 10 07 FF 03 0C 10 031007FFFF0C10031007FFFF0C10 031007FFFF0F10031007FFFF0C10031007FF 030C10031007FF 030C10031007FFFF0C10 031007 FF FF 0C 1003 1007FF FF0C 10031007FFFF0F10 031007FFFF 0C10
static List<string> GetXXXXX(string str)
{
List<string> result = new List<string>();
char[] chs = new char[14];
for (int i = 0, j = 0; i < str.Length; i++)
{
if (str[i] != ' ')
{
chs[j++] = str[i];
if (j == 14)
{
result.Add(new string(chs));
j = 0;
}
}
}
return result;
}
private List<string> Locate(string recv)
{
List<string> result = new List<string>();
char[] tmp = new char[14];
tmp[0] = '0';
tmp[1] = '3';
tmp[2] = '1';
tmp[3] = '0';
tmp[4] = '0';
tmp[5] = '7';
int i = 0;
foreach (char a in recv)
{
//非16禁止字符直接丢弃
if (a < 30 || a > 46)
continue;
//判断前面6位是否为固定值,不是就重新判断
if (i < 6)
{
if (tmp[i] != a)
i = 0;
else
i++;
}
else
{
tmp[i] = a;
if (i == 13)
{
result.Add(new string(tmp));
i = 0;
}
else
i++;
}
}
return result;
}
private List<string> Locate(string recv)
{
recv = recv.Replace(" ", "");//如果有空白字符不是空格,例如0x00,0x01等不可显示字符,则需要用正则替换空白字符。
List<string> result = new List<string>();
char[] tmp = new char[14];
tmp[0] = '0';
tmp[1] = '3';
tmp[2] = '1';
tmp[3] = '0';
tmp[4] = '0';
tmp[5] = '7';
int i = 0;
foreach (char a in recv)
{
//判断前面6位是否为固定值,不是就重新判断
if (i < 6)
{
if (tmp[i] != a)
i = 0;
else
i++;
}
else
{
tmp[i] = a;
if (i == 13)
{
result.Add(new string(tmp));
i = 0;
}
else
i++;
}
}
return result;
}
private List<string> Locate(string recv)
{
recv = recv.Replace(" ", "");//如果有空白字符不是空格,例如0x00,0x01等不可显示字符,则需要用正则替换空白字符。
List<string> result = new List<string>();
char[] tmp = new char[14];
tmp[1] = '3';
tmp[2] = '1';
tmp[5] = '7';
int i = 0;
foreach (char a in recv)
{
//判断前面6位是否为固定值,不是就重新判断
if (i < 6)
{
if (tmp[i] != a)
i = 0;
else
i++;
}
else
{
tmp[i] = a;
if (i == 13)
{
result.Add(new string(tmp));
i = 0;
}
else
i++;
}
}
return result;
}
string s = "031007FFFF0C10 031007FFFF0F11 031007FF030C10031007FFFF0C10 03 1007 FF FF0C10 031007FFFF0C10 03 10 07 FF 03 0C 10 031007FFFF0C10031007FFFF0C10 031007FFFF0F10031007FFFF0C10031007FF 030C10031007FF 030C10031007FFFF0C10 031007 FF FF 0C 1003 1007FF FF0C 10031007FFFF0F10 031007FFFF 0C10"
.Replace(" ","");
MatchCollection mc= Regex.Matches(s,@"031007[0-9A-F]{8,8}");
foreach (Match m in mc)
{
Console.WriteLine(m.Value);
}
按你的要求,正则是最快的了,别听他扯蛋,只是之前少替换了空格。正则最快吗?我不懂正则。。。听说正则拖速度啊。。。 [quote=引用 7 楼 c02645 的回复:] 你是不是想求正则,正则最快
[quote=引用 8 楼 danding_ge 的回复:] [quote=引用 7 楼 c02645 的回复:]你是不是想求正则,正则最快string s = "031007FFFF0C10 031007FFFF0F11 031007FF030C10031007FFFF0C10 03 1007 FF FF0C10 031007FFFF0C10 03 10 07 FF 03 0C 10 031007FFFF0C10031007FFFF0C10 031007FFFF0F10031007FFFF0C10031007FF 030C10031007FF 030C10031007FFFF0C10 031007 FF FF 0C 1003 1007FF FF0C 10031007FFFF0F10 031007FFFF 0C10"; MatchCollection mc= Regex.Matches(s,@"03[\w]{7,7}"); foreach (Match m in mc) { Console.WriteLine(m.Value); }
正则最快吗?我不懂正则。。。听说正则拖速度啊。。。 [quote=引用 7 楼 c02645 的回复:] 你是不是想求正则,正则最快
private string[] Locate(string recv)
{
string[] allrecv = new string[100];
int len = 0;
recv.Trim();
char[] charrecv = recv.ToCharArray();
for (int itra = 0; itra < recv.Length; itra++ )
{
try
{
for (int jtra = 0; jtra < 6; jtra++ )
{
allrecv[len] += charrecv[itra + jtra];
}
if (allrecv[len] == "031007")
{
for (int jtra = 6; jtra < 14; jtra++ )
{
allrecv[len] += charrecv[itra + jtra];
}
len++;
itra = itra + 13;
}
}
catch (System.Exception)
{
break;
}
}
return allrecv;
}
[quote=引用 7 楼 c02645 的回复:]你是不是想求正则,正则最快string s = "031007FFFF0C10 031007FFFF0F11 031007FF030C10031007FFFF0C10 03 1007 FF FF0C10 031007FFFF0C10 03 10 07 FF 03 0C 10 031007FFFF0C10031007FFFF0C10 031007FFFF0F10031007FFFF0C10031007FF 030C10031007FF 030C10031007FFFF0C10 031007 FF FF 0C 1003 1007FF FF0C 10031007FFFF0F10 031007FFFF 0C10"; MatchCollection mc= Regex.Matches(s,@"03[\w]{7,7}"); foreach (Match m in mc) { Console.WriteLine(m.Value); }
你想要的正则是,这是16进制正则 03[0-9a-fA-F]{14,14} 或者 [0-9a-fA-F]{18,18} 吧?