正则表达式GroupCollection

shaohui139 2009-01-15 08:22:28
高手们帮我看看
string Week = "周一|周二|周三|周四|周五|周六|周日";
string WeekPattern="("+Week+")?";

GroupCollection time = Regex.Match(input, WeekPattern, RegexOptions.Compiled).Groups;

for (int i = 0; i < time.Count; i++)
{
Response.Write("time[" + i + "].Value:" + time[i].Value + "<br/>");
}
若input为“周一”,输出的两个结果都为周一,
若input为“在周一”,输入的两个结果都为空,请问这是什么原因,该如何解决呢,
...全文
319 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
shaohui139 2009-01-15
  • 打赏
  • 举报
回复
多谢wackyboy 的回复,突然茅塞顿开,
我还想问一下:mc中,按索引值顺序,只要碰到第一个不是空的,那么这个是匹配整个字符串得到的结果,
这么理解对吧
shaohui139 2009-01-15
  • 打赏
  • 举报
回复
我不明白的是为什么string WeekPattern="("+Week+")?";中留着那个?匹配"在周一"这个字符串就匹配不到了,而我想匹配Week零次或一次
wackyboy 2009-01-15
  • 打赏
  • 举报
回复
因为你用了 ? 说明匹配零次或一次
而且你的Regex.Match( 是去到的第一个匹配 所以会出现空的情况


string Week = "周一|周二|周三|周四|周五|周六|周日";
string WeekPattern = "(" + Week + ")?";
string input = "在周二";
MatchCollection mc = Regex.Matches(input, WeekPattern, RegexOptions.Compiled);
for (int j = 0; j < mc.Count; j++)
{
GroupCollection time = mc[j].Groups;
for (int i = 0; i < time.Count; i++)
{
Response.Write("Match["+j+"] time[" + i + "].Value:" + time[i].Value + " <br/>");
}
}
chinaicm 2009-01-15
  • 打赏
  • 举报
回复
"在周一" 按你的哪个分组,就分为" " 和 周一 了.

shaohui139 2009-01-15
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 wackyboy 的回复:]
因为Group[0]返回的是你匹配的整个字符串 Group[1]Group[2]……才是你的正则中捕获的组的内容
[/Quote]
time[0]是返回匹配的整个字符串,要匹配的是“在周一”,那匹配得到的整个字符串应该是“周一”啊,为什么没有结果呢
jiang_jiajia10 2009-01-15
  • 打赏
  • 举报
回复
也就是说如果你的正则表达式正确的话就应该是

string str = mm.Groups["Week"].Value.ToString().Trim();

jiang_jiajia10 2009-01-15
  • 打赏
  • 举报
回复

string strstrMusicTopContent = @"<td width=""17%"" height=""28"" bgcolor=""#FFFFFF"" class=""border""><a href=""(?<url>[^""]+)""[^>]*>";
MatchCollection MT = Regex.Matches(strMusicTopText, strstrMusicTopContent, RegexOptions.IgnoreCase | RegexOptions.Compiled);
foreach (Match mm in MT)
{
strTopArr[xxx] = mm.Groups["url"].Value.ToString().Trim();

}

给你写个例子就知道了
shaohui139 2009-01-15
  • 打赏
  • 举报
回复
多谢...
string WeekPattern="("+Week+")?";
我是想匹配Week不出现或出现一次啊
zjybushiren88888 2009-01-15
  • 打赏
  • 举报
回复
string WeekPattern="("+Week+")";
chinaicm 2009-01-15
  • 打赏
  • 举报
回复
string WeekPattern="("+Week+")?";
这个问号去掉就可以了。
string WeekPattern="("+Week+")";
wackyboy 2009-01-15
  • 打赏
  • 举报
回复
因为Group[0]返回的是你匹配的整个字符串 Group[1]Group[2]……才是你的正则中捕获的组的内容
greatverve 2009-01-15
  • 打赏
  • 举报
回复
好整洁的提问,学习。

62,269

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

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