【问题标题】:Regex to split string and Date正则表达式拆分字符串和日期
【发布时间】:2014-04-22 20:41:35
【问题描述】:

我正在尝试使用 C# 拆分 John Doe 12/01/1950John * Doe 12/01/1950John 12/01/195012/01/1950 John12/01/1950 John * Doe 等模式。预期的结果是一个字符串中的日期,而另一个字符串中的其余部分......

【问题讨论】:

  • 您尝试过任何方法来解决您的问题吗?
  • @SonerGönül 他把它贴在堆栈溢出上:)
  • 老实说,还没有……这对我来说是从天上掉下来的,它已经过期了 6 天……我不知道如何构建正则表达式……我开始了环顾四周...
  • 如果您被允许使用多个正则表达式,我会:使用 string.split(',') 然后执行两个单独的正则表达式并使用匹配的一个。否则,日期是第一个还是最后一个的情况会很复杂。
  • 懒惰的方法是在空间上分割然后用 date.tryparse 检查每个。如果是日期,则将其存储在一个变量中,其余项目附加到第二个变量。

标签: c# regex split


【解决方案1】:

匹配日期

(\d+/){2}\d+

即一位或多位数字,后跟一个斜线,重复两次,后跟一位或多位数字。如果你想具体说明他们放了多少位数,你可以使用

\d\d/\d\d/\d\d\d\d

我们可以通过搜索单词字符(\w)来匹配名称

(\w+ +\* +\w+)|(\w+ +\w+)|(\w+)

分别表示“单词空格星空格单词”或“单词空格单词”或“单词”。

【讨论】:

    【解决方案2】:

    你可以这样做:

    string[] lines = new[] {
        "John Doe 12/01/1950",
        "John * Doe 12/01/1950",
        "John 12/01/1950",
        "12/01/1950 John",
        "12/01/1950 John * Doe" };
    foreach (string line in lines)
    {
        Match m = Regex.Match(line, @"(?<name1>.*?)\s?(?<date>\d\d/\d\d/\d{4})\s?(?<name2>.*)");
        string date = m.Groups["date"].Value;
        string name = m.Groups["name1"].Value + m.Groups["name2"].Value;
        Console.WriteLine("{0} - {1}", date, name);
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-11-19
      • 2011-06-18
      相关资源
      最近更新 更多