C# Regex 正则匹配的问题
publicstringFilter(stringmsg){stringwords="你好|你好吗";Regexregex=newRegex(words,RegexOpt...
public string Filter(string msg)
{
string words = "你好|你好吗";
Regex regex = new Regex(words, RegexOptions.IgnoreCase);
MatchCollection matches = regex.Matches(msg);
foreach (Match match in matches)
{
string repStr = "";
for (int k = 0; k < match.Length; k++)
{
repStr += "*";
}
msg = Regex.Replace(msg, match.Value, repStr);
}
return msg;
}
public void main()
{
Console.WriteLine("{0}", Filter("你好")); //**
Console.WriteLine("{0}", Filter("你好吗")); //**吗
}
我输入“你好”,可以正常屏蔽。为什么输入“你好吗”只匹配了你好,没有全词匹配“你好吗”,请问这是什么问题怎么解决,在线等!
我在做聊天敏感字过滤功能,有一个敏感字字库表,想对把聊天输入的内容和字库比对,全词匹配成功就过滤掉。现在有一个问题,我字库里有“你好”和“你好吗”,我输入“你好”是没问题的,可以匹配。但是输入“你好吗”,匹配到的还是“你好”,不是“你好吗”,请问是什么问题,代码该怎么写? 展开
{
string words = "你好|你好吗";
Regex regex = new Regex(words, RegexOptions.IgnoreCase);
MatchCollection matches = regex.Matches(msg);
foreach (Match match in matches)
{
string repStr = "";
for (int k = 0; k < match.Length; k++)
{
repStr += "*";
}
msg = Regex.Replace(msg, match.Value, repStr);
}
return msg;
}
public void main()
{
Console.WriteLine("{0}", Filter("你好")); //**
Console.WriteLine("{0}", Filter("你好吗")); //**吗
}
我输入“你好”,可以正常屏蔽。为什么输入“你好吗”只匹配了你好,没有全词匹配“你好吗”,请问这是什么问题怎么解决,在线等!
我在做聊天敏感字过滤功能,有一个敏感字字库表,想对把聊天输入的内容和字库比对,全词匹配成功就过滤掉。现在有一个问题,我字库里有“你好”和“你好吗”,我输入“你好”是没问题的,可以匹配。但是输入“你好吗”,匹配到的还是“你好”,不是“你好吗”,请问是什么问题,代码该怎么写? 展开
4个回答
展开全部
你好吗|你好
或者
你好吗?
原因是你如果写成
你好|你好吗
首先会被“你好”匹配掉了,也就是消耗掉了,所以“你好吗”正则去匹配一个“吗”,是匹配不到的。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
2018-10-30 · 知道合伙人互联网行家
关注
展开全部
你的理解没错。你可以用以下程序验证:
string s = "aaaa(bbb)aaaaaaaaa(bb)aaaaaa";
string pattern = "\\(\\w+\\)";
Match result = Regex.Match(s,pattern);
MatchCollection results = Regex.Matches(s,pattern);
然后你会看到
result.Value = {(bbb)};
results[0].Value = {(bbb)};
results[1].Value = {(bb)};
也就是match会捕获第一个匹配。而matches会捕获所有的匹配。
——————————————————
matchcollection result = Regex.matches(s)
match类型就是一个单独的捕获,matchcollection就是一组捕获。
string s = "aaaa(bbb)aaaaaaaaa(bb)aaaaaa";
string pattern = "\\(\\w+\\)";
Match result = Regex.Match(s,pattern);
MatchCollection results = Regex.Matches(s,pattern);
然后你会看到
result.Value = {(bbb)};
results[0].Value = {(bbb)};
results[1].Value = {(bb)};
也就是match会捕获第一个匹配。而matches会捕获所有的匹配。
——————————————————
matchcollection result = Regex.matches(s)
match类型就是一个单独的捕获,matchcollection就是一组捕获。
本回答被网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
相不相等的这种简单问题,你自己在 if (SN == SN1)这一行下断点,看看SN和SN1分别是什么就知道了无需多说,只是你的richtextbox时倒底想输出什么内容,按你程序的逻辑如果CanshutextBox中有2组数,dataGridView中有10行,那richtextbox中就有20个内容
追问
没看懂
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
2018-10-30
展开全部
就像捕获错误一样,先特殊、后一般,“你好吗”比“你好”要特殊,所以应该放到前面匹配
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询