C#正则表达式的问题

_XuDaojie 2014-05-09 03:06:22
C#里是不是不能进行完全匹配啊

string str = "甲2乙33丙12丁11戊22己1"
//string str2 = "甲a2乙a33丙12丁11戊22己1"
Regex reg = new Regex("[甲乙丙丁戊己][1-999]+");
bool b = reg.IsMatch(str);

这里的Regex.IsMatch的方法只要str中存在一个可以匹配的就返回true
也就是str和str2都是返回true
我现在希望str2的话为false

string str3 = "";
MatchCollection strs = reg.Matches(str);
foreach (Match item in strs)
{
str3 += item.ToString();
}
if (str3 == str)
{
//匹配
}

除了我上面的方法还有别的方法吗
感觉这个有点不靠谱
...全文
135 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
_XuDaojie 2014-05-12
  • 打赏
  • 举报
回复
引用 2 楼 shawn_yang 的回复:
[甲乙丙丁戊己0-9]*
看来我对正则的理解还是不够啊 原来就没学好 后来也很少用到
祥子爱游戏 2014-05-12
  • 打赏
  • 举报
回复
引用 2 楼 shawn_yang 的回复:
[甲乙丙丁戊己0-9]*
可能是对的。我试了下可以的。 我的是甲/d+乙/d+丙/d+丁/d+戊/d+己/d+ 就想说一句机智的我
_XuDaojie 2014-05-12
  • 打赏
  • 举报
回复
引用 3 楼 iceMung 的回复:
你的数字是不是必须在1-999之间? 如果不是的话,可以用string.Length == Regex.Replace(string, "[^甲乙丙丁戊己0-9]", "").Length去比较
基本上最大值100以内就差不多了,999是为了保险
iceMung 2014-05-12
  • 打赏
  • 举报
回复
引用 5 楼 a379992210 的回复:
基本上最大值100以内就差不多了,999是为了保险
如果数字是任意长度的,那就直接匹配”[0-9]“;如果是指定区间的,可以考虑匹配类似”\d{1,3}“(如#4)
欢乐的小猪 2014-05-09
  • 打赏
  • 举报
回复
改为这个试试
   Regex reg = new Regex(@"^([甲乙丙丁戊己]\d{1,3})+$");
iceMung 2014-05-09
  • 打赏
  • 举报
回复
你的数字是不是必须在1-999之间? 如果不是的话,可以用string.Length == Regex.Replace(string, "[^甲乙丙丁戊己0-9]", "").Length去比较
shawn_yang 2014-05-09
  • 打赏
  • 举报
回复
[甲乙丙丁戊己0-9]*
_XuDaojie 2014-05-09
  • 打赏
  • 举报
回复
匹配规则是每个甲或乙后面都必须要跟一个数字 我的正则表达式应该是没问题的吧

110,571

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧