从非结构化字符串解析日期

时间:2012-02-08 13:14:30

标签: c# asp.net .net vb.net

我有非结构化的字符串。由此我需要找到日期。

示例:[预期输入]

  1. “01/21/2012:文字将在这里”
  2. “; 01/21/2012:文字将在这里”
  3. “文字将在这里.01 / 21/2012:继续文字”
  4. “文字将在这里。\ n 01/21/2012:继续文字”
  5. ”     文本将在这里01/21/2012“
  6. 注意:日期可以是任何格式,例如2012年1月1日,2012年1月12日,12/01/2012等。

    任何有用的帮助。

4 个答案:

答案 0 :(得分:2)

为什么用户输入允许这样的自由格式文本开头?对于开放式任何字符串解析的输入,你所做的将充其量只是参差不齐。如果用户输入看起来像日期或其他日期的数字,该怎么办?您如何确定哪个日期是您需要跟踪的“日期”?

有关您的问题的更多信息可能有助于解决方案,但现在我建议要求在其自己的输入元素中输入日期。

答案 1 :(得分:1)

将字符串解析为由空格分隔的连续块,看起来像string.split(“”)几乎可以工作,但您可能需要考虑“:”s。

在每个块上,使用DateTime.TryParse检查。

    Dim text(2) As String
    text(0) = "01/21/2012: text will be here"
    text(1) = "text will be here. \n 01/21/2012: continues text"
    text(2) = " text will be here 01/21/2012"

    For Each s As String In text
        Dim a As String() = s.split(" "c)
        For Each s1 As String In a
            If s1.endswith(":") Then s1 = s1.remove(s1.length-1)
            Dim dt As datetime
            Dim ok As Boolean = datetime.tryparse(s1,dt)
            If ok = True Then output.writeline(dt.tostring)
        Next s1
    Next s

答案 2 :(得分:0)

最好的方法是使用RegEx,但您必须为所有日期格式创建规则。 否则,您可以使用更通用的正则表达式,然后查找所有匹配项并验证/解析为日期。

希望能让你了解如何做到这一点。

答案 3 :(得分:0)

我认为正则表达会有所帮助。

首先,记下所有可能的日期格式 第二,将它们转换为正则表达式 final,匹配正则表达式。

注意,正则表达式不支持计数,所以,你只能提取一,二,三......一个匹配中指定的日期数,如果字符串中的日期数不固定,你可以动态生成正则表达式或多次匹配。