首页 新闻 会员 周边 捐助

Regex 匹配一句话是另一句话的子集

0
悬赏园豆:20 [已关闭问题] 关闭于 2013-02-01 11:17

如:USB 1000 / 1200 / 1600dpi Wired Optical Gaming Mouse - Black (140cm-Cable)

      USB 1000 / 1200 / 1600dpi Wired Optical Gaming Mouse - Black 可以匹配

      Mouse - Black (140cm-Cable)1 不可以匹配,匹配必须以一个单词作为一个整体,(140cm-Cable)和(140cm-Cable)1不可以匹配

匹配时必须以一个单词做为整体和上面匹配,

老孟Flutter的主页 老孟Flutter | 初学一级 | 园豆:55
提问于:2013-01-30 10:56
< >
分享
所有回答(2)
0

直接用 contain或者 indexof 就可以判断是否匹配子集

geass.. | 园豆:1821 (小虾三级) | 2013-01-30 14:58

这个方法显然是不行的,(140cm-Cable)和(140cm-Cable)1不可以匹配,这2个方法明显能匹配的上

支持(0) 反对(0) 老孟Flutter | 园豆:55 (初学一级) | 2013-02-01 11:15
0

正则表达式我没有研究出来,不过自己写了个方法,不过效率不是很好,

private int ArrayListMatchs(ArrayList modifyArrs, ArrayList originalArrs)
{
if (modifyArrs.Count < originalArrs.Count)
{
return -1;
}

for (int j = 0; j < modifyArrs.Count; j++)
{
if (originalArrs[0].Equals(modifyArrs[j]))
{
if (ArrayListMatchs(modifyArrs, originalArrs, j))
{
return j;
}
}
}

return -1;
}
private bool ArrayListMatchs(ArrayList modifyArrs, ArrayList originalArrs, int modifyArrsIndex)
{
if (modifyArrsIndex + originalArrs.Count > modifyArrs.Count)
{
return false;
}
int j = modifyArrsIndex;
bool flag = true;

for (int i = 0; i < originalArrs.Count; i++)
{
if (!modifyArrs[j].Equals(originalArrs[i]))
{
flag = false;
break;
}
j++;
}
return flag;
}

老孟Flutter | 园豆:55 (初学一级) | 2013-02-01 11:15
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册