匹配首个出现的字符

zenjj 2009-10-01 12:42:52


Regex token = new Regex(@"(?<word>abc)", RegexOptions.Compiled);
MatchCollection matches = token.Matches("bcabcabcabcabcpp");

if (matches.Count != 0)
{
foreach (Match matchList in matches)
{
Console.WriteLine("word:{0}",matchList.Groups["word"]);


}
}

Console.ReadLine();

上面的正则表达式匹配了所有的abc,
可是我只想匹配第一个abc的值,其他的不去匹配,正则表达式应该怎么写呢?谢谢!!
...全文
105 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
CsToD 2009-10-01
  • 打赏
  • 举报
回复
@"(?<!abc)(?<word>abc)"
?后面多了一个空格吧
zenjj 2009-10-01
  • 打赏
  • 举报
回复
我用2楼的试,出错
CsToD 2009-10-01
  • 打赏
  • 举报
回复
@"(?<!abc)(?<word>abc)"
xray2005 2009-10-01
  • 打赏
  • 举报
回复
只想匹配第一个abc的值,其他的不去匹配

---------------
没太明白你的意思.

如果你只想匹配,你可以token.IsMatche("...");
如果你想取第一个,你可以MatchCollection matches = token.Matches("bcabcabcabcabcpp");

matches[0] 就是第一个
24K純帥 2009-10-01
  • 打赏
  • 举报
回复
[Quote=引用楼主 zenjj 的回复:]
C# code

Regex token=new Regex(@"(?<word>abc)", RegexOptions.Compiled);
MatchCollection matches= token.Matches("bcabcabcabcabcpp");if (matches.Count!=0)
{foreach (Match matchListin matches)
{
Console.WriteLine("word:{0}",matchList.Groups["word"]);


}
}

Console.ReadLine();
上面的正则表达式匹配了所有的abc,
可是我只想匹配第一个abc的值,其他的不去匹配,正则表达式应该怎么写呢?谢谢!!
[/Quote]
就这样,很轻松
rong505968 2009-10-01
  • 打赏
  • 举报
回复
(? <!abc)(? <word>abc)
rong505968 2009-10-01
  • 打赏
  • 举报
回复
?号与<!之间不能用空格,否则出错
rong505968 2009-10-01
  • 打赏
  • 举报
回复
正则表达式用这个(?<!abc)(?<word>abc)是可以的,不过,还有其它的办法:
Regex token = new Regex(@"(?<word>abc)", RegexOptions.Compiled);
Match matche = token.Match("bcabcabcabcabcpp");
Response.Write(matche.Groups["word"] + "<br/>");
jiangshun 2009-10-01
  • 打赏
  • 举报
回复
既然能匹配所有的,写个for循环取第一个就可以了
for(int i=0,i<matches.Count,i++)
_matches[i].ToString()
zenjj 2009-10-01
  • 打赏
  • 举报
回复
Lazy匹配这种匹配不知道也能否做到
zenjj 2009-10-01
  • 打赏
  • 举报
回复
是啊,测试后通过,不知道还有没有别的办法
我姓区不姓区 2009-10-01
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 ojlovecd 的回复:]
引用 3 楼 zenjj 的回复:
我用2楼的试,出错

2楼的没错,只是由于csdn的帖子里会把?和 <中间多加了一个空格,你把那个空格去掉就行了
C# codestring str="bcabcabcabcabcpp";
Console.WriteLine(Regex.Match(str,@"(?<!abc)(?<word>abc)").Groups["word"].Value);
[/Quote]
更正一下,其实是在<号前自动加了一个空格
我姓区不姓区 2009-10-01
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 zenjj 的回复:]
我用2楼的试,出错
[/Quote]
2楼的没错,只是由于csdn的帖子里会把?和<中间多加了一个空格,你把那个空格去掉就行了

string str = "bcabcabcabcabcpp";
Console.WriteLine(Regex.Match(str, @"(?<!abc)(?<word>abc)").Groups["word"].Value);

CsToD 2009-10-01
  • 打赏
  • 举报
回复
晕,CSDN自动在后面加空格

110,537

社区成员

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

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

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