【问题标题】:Regex to find a date BEFORE a word正则表达式在单词之前查找日期
【发布时间】:2019-06-06 18:35:02
【问题描述】:

我正在尝试编写 RegEx 语句来定位特定单词之前的第一个日期。

我使用下面的正则表达式来显示特定单词之后的第一个日期。

字 +\K(?:([0-9]+)/([0-9]+)/([0-9]+)|((0?[1-9]|1[0-2]) -(0?[1-9]|[12]\d|3[01])-(\d{4}|\d{2}))|\w+\s\d{2},\s\ d{4}|(?i)\b(Jan(?:uary|.)?|Feb(?:ruary|.)?|Mar(?:ch|.)?|Apr(?:il|.) ?|五月|六月(?:e|.)?|七月(?:y|.)?|八月(?:ust|.)?|九月(?:tember|.)?|十月(?:ober| .)?|Nov(?:ember|.)?|Dec(?:ember|.)?)( ,?[ ]|-(?:0?[1-9]|[1-2][0-9]|3[01])-)(\d{4}))

这是我希望它返回的示例。

这里有很多词 01/07/2019 02/03/2019 02/08/2019 更多词在这里。在这种情况下,它应该返回日期 02/08/2019。如何更改上述语句以查找指定单词之前的日期?

我使用 Notepad ++ 测试这是否有助于确定我使用的 RegEx 类型。

额外问题:有时要匹配的单词可能会换行。正则表达式仍然可以匹配吗?例如,它的格式可能如下所示,其中“更多”一词位于新行:

Many words here 
01/07/2019 
02/03/2019 
02/08/2019 
More words here

【问题讨论】:

    标签: regex


    【解决方案1】:

    您可以在日期结束时使用积极的前瞻 (?=\h+More\b) 来断言后面的内容是水平空白字符的 1 倍以上,然后是 Word 和单词边界。

    (?:([0-9]+)/([0-9]+)/([0-9]+)|((0?[1-9]|1[0-2])-(0?[1-9]|[12]\d|3[01])-(\d{4}|\d{2}))|\w+\s\d{2},\s\d{4}|(?i)\b(Jan(?:uary|.)?|Feb(?:ruary|.)?|Mar(?:ch|.)?|Apr(?:il|.)?|May|Jun(?:e|.)?|Jul(?:y|.)?|Aug(?:ust|.)?|Sep(?:tember|.)?|Oct(?:ober|.)?|Nov(?:ember|.)?|Dec(?:ember|.)?)( ,?[ ]|-(?:0?[1-9]|[1-2][0-9]|3[01])-)(\d{4}))(?=\h+More\b)
    

    Regex demo

    如果单词可以换行,您可以将 \h 更改为 \s

    Regex demo

    【讨论】:

    • 太棒了!这样可行。如果“更多”一词出现在新行上(回车分隔日期和“更多”一词)怎么办?我在原始帖子中包含了一个示例。
    • @JadonR 我已经更新了答案,以防有换行符。
    • 你是老大!谢谢。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-01-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多