【问题标题】:Regex split whilst keeping the deliminator c#正则表达式拆分同时保留分隔符c#
【发布时间】:2017-04-18 14:30:58
【问题描述】:

我有这样的字符串:"07/04/2017 16:09:03 by Joe Bloggs) added 07/04/2017 17:03:04 by Joe Bloggs) Updated" em>

我想将字符串拆分为 cmets 列表。上面的字符串示例包含两个单独的 cmets,我想将它们拆分为一个列表。我已经确定每条新评论都以日期开头。所以对于每个日期,id 都喜欢拆分字符串。

我尝试使用以下正则表达式模式'\d{1,2}\/\d{1,2}\/\d{4}' 检测日期。

var sqlComments = "07/04/2017 16:09:03 by Joe Bloggs) Added 07/04/2017 17:03:04 by Joe Bloggs) Updated"
var comments = Regex.Split(sqlComments, RegexDateIdentifier);
return comments.Where(c => c != string.Empty).ToList();

但是,上面的代码会根据需要拆分字符串,但会删除日期。所以我只剩下喜欢了​​;

  1. 16:09:03 由 Joe Bloggs)添加
  2. 17:03:04 由 Joe Bloggs)更新

任何人都可以建议如何执行上述操作,但要保留日期(分隔符)?

【问题讨论】:

  • 搜索一下有关前瞻断言的信息——它们应该可以帮助您拆分“后跟日期的空间”,这看起来就像您想要的那样。还值得检查您的日期格式是否不会更改(例如更改为 ISO 8601 格式)。

标签: c# regex split


【解决方案1】:

这应该做你所追求的,它使用Zero-Width Positive Lookahead Assertion 加上\s+ 来删除空格:

    static void Main(string[] args)
    {
        string RegexDateIdentifier = @"\s+(?=\d{1,2}\/\d{1,2}\/\d{4})";
        var sqlComments = "07/04/2017 16:09:03 by Joe Bloggs) Added 07/04/2017 17:03:04 by Joe Bloggs) Updated";
        var comments = Regex.Split(sqlComments, RegexDateIdentifier);
        var list = comments.ToList();

        foreach (var s in list)
        {
            Console.WriteLine("|{0}|", s);
        }
    }

【讨论】:

  • 那成功了!
猜你喜欢
  • 1970-01-01
  • 2012-06-29
  • 1970-01-01
  • 2014-11-22
  • 2011-02-24
  • 2013-07-06
  • 1970-01-01
  • 1970-01-01
  • 2012-08-13
相关资源
最近更新 更多