【问题标题】:C# .net Regular Expression to match text delimited by spaces and colonC# .net 正则表达式匹配由空格和冒号分隔的文本
【发布时间】:2009-05-27 20:03:37
【问题描述】:

我的三句话如下:

000000-00000 日期 第一个文本:something1 200000-00000 时间 第二个文本:something2 234222-34332 struc 第三个文本:somthing3

如何编写正则表达式以匹配 (Date|Time|struc) 和冒号 (:),不包括 (Date|Time|struc)?。

【问题讨论】:

  • 不确定你的意思。您能否提供您实际想要匹配/不匹配的样本?

标签: c# regex


【解决方案1】:

我怀疑这就是你想要的。正则表达式部分是:

new Regex(@"^\d{6}-\d{5} \w* ([^:]*): ")

这是一个简短但完整的测试程序:

using System;
using System.Text.RegularExpressions;

class Test
{   
    static void Main(string[] args)
    {
        Parse("000000-00000 Date First text: something1");
        Parse("200000-00000 Time Second text: something2");
        Parse("234222-34332 struc Third text: somthing3");
    }

    static readonly Regex Pattern = new Regex
        (@"^\d{6}-\d{5} \w* ([^:]*): ");

    static void Parse(string text)
    {
        Console.WriteLine("Input: {0}", text);
        Match match = Pattern.Match(text);
        if (!match.Success)
        {
            Console.WriteLine("No match!");
        }
        else
        {
            Console.WriteLine("Middle bit: {0}", match.Groups[1]);
        }
    }
}

请注意,这并不假定“日期”、“时间”、“结构”是数字之后唯一可能的值,只是它们将由单词字符构成。它还假设您要匹配整行,而不仅仅是中间部分。如果这对您有帮助,可以很容易地与其他组一起提取其他部分。

【讨论】:

  • 承认吧。你已经准备好了答案。 :-)
  • 我已经准备好了所有的答案。不过找到合适的需要很长时间;)
【解决方案2】:

以下表达式会将您想要的内容捕获到命名组 value 中,不包括 DateTimestruc、后面的空格和值后面的冒号。

(?:Date|Time|struc) (?<value>[^:]*)

此表达式将包含冒号。

(?:Date|Time|struc) (?<value>[^:]*:)

【讨论】:

    【解决方案3】:

    这个:

    ^\d{6}-\d{5} \S+ ([^:]+)
    

    将匹配“第一个文本”、“第二个文本”和“第三个文本”,而不明确引用 (Date|Time|struc)。比赛在第 1 组。

    【讨论】:

      【解决方案4】:

      如果您是示例,您期望输出为:

      第一个文本 第二个文本 第三个文本

      你会使用正则表达式

      (?<=(DATE|TIME|STRUC)\s)[^:]*
      

      我无法想象看看你的例子会非常有用 - 它看起来描述性文本是 冒号之后,这意味着你真的希望一切都在行尾这将是:

      (?i:(?<=(DATE|TIME|STRUC)\s).*)
      

      [使用 RegexBuddy 进行检查 - 因此,如果我正确解释了您的问题,则此方法有效]

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-05-31
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-08-31
        相关资源
        最近更新 更多