为什么此循环通过正则表达式组将输出打印两次?

知道不多

我已经写了这个非常简单的正则表达式代码

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Text.RegularExpressions;
using System.Threading.Tasks;

namespace RegexTest1
{
    class Program
    {
        static void Main(string[] args)
        {
            string a = "\"foobar123==\"";
            Regex r = new Regex("^\"(.*)\"$");
            Match m = r.Match(a);
            if (m.Success)
            {
                foreach (Group g in m.Groups)
                {
                    Console.WriteLine(g.Index);
                    Console.WriteLine(g.Value);
                }
            }
        }
    }
}

但是输出是

0
“ foobar123 ==”
1个
foob​​ar123 ==

我不明白为什么要打印两次。为什么要在索引0处进行捕获?当我在正则表达式中说^\"但我没有为此使用捕获时。

抱歉,如果这是非常基本的,但是我每天都不会写Regex。

据我说,这段代码应该只打印一次,索引应该是1,值应该是foobar ==

谢尔盖·卡里尼琴科(Sergey Kalinichenko)

发生这种情况是因为零组很特殊:它返回整个匹配项。

从正则表达式文档(添加重点):

一个简单的正则表达式模式说明了如何以编程方式或使用正则表达式语言语法来引用编号(未命名)和命名组。正则表达式((?<One>abc)\d+)?(?<Two>xyz)(.*)按编号和名称生成以下捕获组。第一个捕获组(数字0)始终引用整个模式。

#      Name              Group
- ---------------- --------------------------------
0 0 (default name) ((?<One>abc)\d+)?(?<Two>xyz)(.*)

1 1 (default name) ((?<One>abc)\d+)

2 2 (default name) (.*)

3 One (?<One>abc)

4 Two (?<Two>xyz)

如果不想看到它,请从第一组开始输出。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

为什么正则表达式使用Java中的“匹配”两次获得价值?

来自分类Dev

为什么此正则表达式通过?

来自分类Dev

正则表达式..将字符串数组拆分两次

来自分类Dev

将德国变音符号与正则表达式正确匹配两次

来自分类Dev

为什么此正则表达式也匹配非捕获组中的单词?

来自分类Dev

为什么此正则表达式返回的组比应有的多?

来自分类Dev

正则表达式Java,为什么此正则表达式这么慢?

来自分类Dev

为什么此正则表达式仅匹配一次?

来自分类Dev

为什么此正则表达式匹配真假?

来自分类Dev

为什么此正则表达式与结尾>

来自分类Dev

为什么此正则表达式不匹配?

来自分类Dev

为什么此正则表达式不匹配?

来自分类Dev

为什么此正则表达式无效?

来自分类Dev

为什么此正则表达式匹配?

来自分类Dev

为什么此正则表达式与结尾>

来自分类Dev

为什么此范围的正则表达式失败?

来自分类Dev

为什么此正则表达式匹配/ \ w + [^(] /?

来自分类Dev

为什么此正则表达式匹配?

来自分类Dev

为什么此正则表达式匹配?

来自分类Dev

为什么此正则表达式逻辑失败?

来自分类Dev

为什么此正则表达式不匹配?

来自分类Dev

为什么此正则表达式允许星号通过?

来自分类Dev

为什么此正则表达式允许星号通过?

来自分类Dev

为什么带有捕获组的此正则表达式不能在bash中工作?

来自分类Dev

为什么此正则表达式可以在Ubuntu上通过但不能在Mac OS X上通过

来自分类Dev

Javascript正则表达式-两次获取两次匹配之间的字符串

来自分类Dev

正则表达式-为什么此正则表达式不能在Python中工作?

来自分类Dev

Java正则表达式匹配至少出现两次的单词

来自分类Dev

正则表达式单词在字符串中两次

Related 相关文章

  1. 1

    为什么正则表达式使用Java中的“匹配”两次获得价值?

  2. 2

    为什么此正则表达式通过?

  3. 3

    正则表达式..将字符串数组拆分两次

  4. 4

    将德国变音符号与正则表达式正确匹配两次

  5. 5

    为什么此正则表达式也匹配非捕获组中的单词?

  6. 6

    为什么此正则表达式返回的组比应有的多?

  7. 7

    正则表达式Java,为什么此正则表达式这么慢?

  8. 8

    为什么此正则表达式仅匹配一次?

  9. 9

    为什么此正则表达式匹配真假?

  10. 10

    为什么此正则表达式与结尾>

  11. 11

    为什么此正则表达式不匹配?

  12. 12

    为什么此正则表达式不匹配?

  13. 13

    为什么此正则表达式无效?

  14. 14

    为什么此正则表达式匹配?

  15. 15

    为什么此正则表达式与结尾>

  16. 16

    为什么此范围的正则表达式失败?

  17. 17

    为什么此正则表达式匹配/ \ w + [^(] /?

  18. 18

    为什么此正则表达式匹配?

  19. 19

    为什么此正则表达式匹配?

  20. 20

    为什么此正则表达式逻辑失败?

  21. 21

    为什么此正则表达式不匹配?

  22. 22

    为什么此正则表达式允许星号通过?

  23. 23

    为什么此正则表达式允许星号通过?

  24. 24

    为什么带有捕获组的此正则表达式不能在bash中工作?

  25. 25

    为什么此正则表达式可以在Ubuntu上通过但不能在Mac OS X上通过

  26. 26

    Javascript正则表达式-两次获取两次匹配之间的字符串

  27. 27

    正则表达式-为什么此正则表达式不能在Python中工作?

  28. 28

    Java正则表达式匹配至少出现两次的单词

  29. 29

    正则表达式单词在字符串中两次

热门标签

归档