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("你好吗")); //**吗
}

我输入“你好”,可以正常屏蔽。为什么输入“你好吗”只匹配了你好,没有全词匹配“你好吗”,请问这是什么问题怎么解决,在线等!
我在做聊天敏感字过滤功能,有一个敏感字字库表,想对把聊天输入的内容和字库比对,全词匹配成功就过滤掉。现在有一个问题,我字库里有“你好”和“你好吗”,我输入“你好”是没问题的,可以匹配。但是输入“你好吗”,匹配到的还是“你好”,不是“你好吗”,请问是什么问题,代码该怎么写?
展开
 我来答
尉穹4w
2018-10-30 · TA获得超过453个赞
知道小有建树答主
回答量:353
采纳率:36%
帮助的人:150万
展开全部
你好吗|你好

或者

你好吗?

原因是你如果写成

你好|你好吗

首先会被“你好”匹配掉了,也就是消耗掉了,所以“你好吗”正则去匹配一个“吗”,是匹配不到的。

已赞过 已踩过<
你对这个回答的评价是?
评论 收起
DoramiHe
2018-10-30 · 知道合伙人互联网行家
DoramiHe
知道合伙人互联网行家
采纳数:25332 获赞数:59543
2011年中山职业技术学院毕业,现担任毅衣公司京东小二

向TA提问 私信TA
展开全部
你的理解没错。你可以用以下程序验证:
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就是一组捕获。
本回答被网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
塔莉很乖的呐D6
2018-10-30 · TA获得超过253个赞
知道小有建树答主
回答量:436
采纳率:71%
帮助的人:72.9万
展开全部
相不相等的这种简单问题,你自己在 if (SN == SN1)这一行下断点,看看SN和SN1分别是什么就知道了无需多说,只是你的richtextbox时倒底想输出什么内容,按你程序的逻辑如果CanshutextBox中有2组数,dataGridView中有10行,那richtextbox中就有20个内容
追问
没看懂
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
匿名用户
2018-10-30
展开全部
就像捕获错误一样,先特殊、后一般,“你好吗”比“你好”要特殊,所以应该放到前面匹配
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式