regex - 正则表达式在单词之前查找日期
问题描述
我正在尝试编写一个 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
解决方案
您可以在日期结束时使用积极的前瞻(?=\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)
如果单词可以在换行符上,您可以更改\h
为\s
推荐阅读
- oracle - Oracle Database In-Memory 是内存数据库吗?
- reactjs - 如何在 React 中将组件放在 PWA 启动屏幕上
- next.js - Next.js 漂亮的 seo url 传递查询参数
- php - 如何修复 laravel 8 UI 分页问题不起作用
- python - 将每个日期多行的缺失日期添加到数据框中
- powershell - 使用 selenium powershell 参数化数据驱动测试
- node.js - 在 javascipt 中使用 ipfs:如何像从命令行将对象转储到文件并读取文件一样读取对象?
- java - 请求 uri 中的冒号是什么?
- python - 通过从存储的海龟图形函数列表中随机选择来创建随机路径
- ruby-on-rails - 在 Ruby 中转换 unicode