Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用正则表达式(C#)捕获第一个匹配_C#_Regex - Fatal编程技术网

使用正则表达式(C#)捕获第一个匹配

使用正则表达式(C#)捕获第一个匹配,c#,regex,C#,Regex,这是我第一次使用C#,也是我有限的正则表达式经验的一部分,我在捕获特定表达式中第一次出现的匹配时遇到了困难。我相信下面的例子将比文字更清楚地描述我想做什么 Match extractor = (new Regex(@".*\d(?<name>.*)\d.*")).Match("This hopefully will pick up 1Bob9error1 as a name"); Console.WriteLine(extractor.Groups["name"]);

这是我第一次使用C#,也是我有限的正则表达式经验的一部分,我在捕获特定表达式中第一次出现的匹配时遇到了困难。我相信下面的例子将比文字更清楚地描述我想做什么

Match extractor = (new Regex(@".*\d(?<name>.*)\d.*")).Match("This hopefully will pick up 1Bob9error1 as a name");
        Console.WriteLine(extractor.Groups["name"]);
Match extractor=(新的正则表达式(@.*\d(?.*\d.*)).Match(“这很可能会将1Bob9error1作为一个名称”);
Console.WriteLine(提取器.Groups[“name”]);
我想用这个表达式来打印“Bob”而不是“error”

我有预感,这和什么有关?在匹配组前面,但我不确定是什么操作?在这种特殊情况下执行。一个解释再加上一些帮助就太好了

谢谢你们,你们不知道这个网站对我这样的程序员有多大的帮助

与前面的元素零次或一次匹配。它是 等价于{0,1}?是一个 贪婪量词,其非贪婪等价物为

摘自。该网站包括一个正则表达式的备忘单,看着你们的表达式,我似乎不知道它可能有什么问题


我的假设是它可能与你最后一次出现的表情相匹配

每个组项都有一个捕获集合,您可以使用以下方法访问组的第一个捕获:

extractor.Groups["name"].Captures[0]

你的问题是贪婪。Regex就是贪婪。您的。*在一开始就抓住了所有这些“希望这将拿起1个”。请尝试使用以下正则表达式:

\d(?<name>[^\d]+)\d
\d(?[^\d]+)\d

表达式周围的括号*字符会给您带来麻烦。请记住,您不需要匹配整个字符串的正则表达式—您希望它在出现时只匹配特定的模式。以下代码起作用:

Regex pattern = new Regex(@"\d(?<name>.*?)\d");
MatchCollection matches = pattern.Matches("This hopefully will pick up 1Bob9error1 as a name");
Console.WriteLine(matches[0].Groups["name"]);
Regex模式=新的Regex(@“\d(?.*?\d”);
MatchCollection matches=pattern.matches(“这很可能会将1Bob9error1作为名称”);
Console.WriteLine(匹配[0]。组[“名称”]);

(?yourRegEx)表示捕获的组,其名称为“name”。这就是为什么您可以使用extractor.Groups[“name”]P.S.每个捕获项都有一个Value属性,返回捕获的实际字符串值,还有一些其他有用的属性,如原始字符串中捕获开始的索引和捕获的长度。当有疑问时,点击F1。Hmmmm…有用的信息,但捕获[0]仍会拾取“错误”正则表达式是否有问题?我可能错了,但我不认为正确?在本例中是一个量词。量词不是通常跟在表达式后面吗?表达式没有问题,他只是在看它捕获的第二个值,而不是第一个值?在此上下文中,表示命名组(更具体地说是名为“name”)的组的开始。在大多数其他地方,它被用作量词。Chad,我建议您安装RegExWorkbench。这是一个老项目,但埃里克·冈纳森做的很棒。如果你没有安装.NET1.xFramework,他会提供源代码,这样你就可以使用你安装的框架来编译它。这实际上就是“Bob”。令人惊叹的。我想我的问题是我对待这个正则表达式就像它必须匹配整个字符串一样,而实际上我只是问它是否匹配。谢谢,你必须记住,对于正则表达式。而且可能非常邪恶。当你制作你的正则表达式时,你真的需要知道你想要找到什么,并且只需要知道。这需要时间,但一旦你始终如一地这样做,你最终会得到坚如磐石的正则表达式。我也推荐这个网站,你也可以读这本书,掌握正则表达式。