【问题标题】:c# - regex don't work (match does not preserve the string)c# - 正则表达式不起作用(匹配不保留字符串)
【发布时间】:2013-05-26 12:06:03
【问题描述】:
Regex regOrg = new Regex(@"org(?:aniser)?\s+(\d\d):(\d\d)\s?(\d\d)?\.?(\d\d)?", RegexOptions.IgnoreCase);
MatchCollection mcOrg = regOrg.Matches(str);
Match mvOrg = regOrg.Match(str);

dayOrg = mvOrg.Value[4].ToString();
monthOrg = mvOrg.Value[5].ToString();
hourOrg = mvOrg.Value[2].ToString();
minuteOrg = mvOrg.Value[3].ToString();

这个正则表达式用文本分析字符串

"organiser 23:59" / "organiser 25:59 31.12" 

"org 23:59" / "org 23:59 31.12"

可选参数的日期和月份 因此,我想用这些数据查看输出变量 dayOrg、monthOrg、hourOrg、minuteOrg,但我得到了这个:

Query: org 23:59 31.12
The value mcOrg.Count: 1
The value dayOrg: 2
The value monthOrg: 3
The value hourOrg: g
The value minuteOrg: empty

我做错了什么?尝试了很多选项,但都不起作用。

【问题讨论】:

    标签: c# regex match


    【解决方案1】:

    您没有正确访问组(您正在访问匹配字符串的单个字符)。

    dayOrg = mvOrg.Groups[4].Value;
    monthOrg = mvOrg.Groups[5].Value;
    hourOrg = mvOrg.Groups[2].Value;
    minuteOrg = mvOrg.Groups[3].Value;
    

    【讨论】:

      【解决方案2】:

      您获得该结果的原因是因为您从 mvOrg 匹配中获得了 Value[index]。

      MSDN 所述,Match 类表示 Value 是第一个匹配项,因此您访问的是第一个匹配项的字符数组而不是组。您需要使用 Match 类的 Groups 属性来获取找到的实际组。

      在尝试访问可选参数之前,请务必检查此集合的计数。

      【讨论】:

        【解决方案3】:

        我为你的模式添加了名称,所以现在它看起来像这样:

                    Regex regOrg = new Regex(@"org(?:aniser)?\s+(?<hourOrg>\d{2}):(?<minuteOrg>\d{2})\s?(?<dayOrg>\d{2})?\.?(?<monthOrg>\d{2})?", RegexOptions.IgnoreCase);
        

        你可以像这样访问结果

                Console.WriteLine(mvOrg.Groups["hourOrg"]);
                Console.WriteLine(mvOrg.Groups["minuteOrg"]);
                Console.WriteLine(mvOrg.Groups["dayOrg"]);
                Console.WriteLine(mvOrg.Groups["monthOrg"]);
        

        使用硬编码索引不是好习惯,因为您可以更改正则表达式,现在需要更改所有索引...
        是你想要的吗?

        【讨论】:

          猜你喜欢
          • 2011-12-21
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多