我有非结构化的字符串。由此我需要找到日期。
示例:[预期输入]
注意:日期可以是任何格式,例如2012年1月1日,2012年1月12日,12/01/2012等。
任何有用的帮助。
答案 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,匹配正则表达式。
注意,正则表达式不支持计数,所以,你只能提取一,二,三......一个匹配中指定的日期数,如果字符串中的日期数不固定,你可以动态生成正则表达式或多次匹配。