regex - 使用正则表达式查找字符串中所有出现的日期
问题描述
我写了一个正则表达式,它在字符串中查找日期(可选地后跟时间)。这里是:
(?:[^0-9]+|^)([0-9]{4})[.-]?([0-9]{2})[.-]?([0-9]{2})(?:[_ \-]?([0-9]{2})[\-.;_]?([0-9]{2})[\-.;_]?([0-9]{2}))?(?:[^0-9]+|$)
导致我出现问题的元素是(?:[^0-9]+|^)
(第一个非捕获组)和(?:[^0-9]+|$)
(最后一个非捕获组)。我需要它们来处理以下情况:(12020-08-02
不是日期)或2020-08-022
(也不是日期)。但是当我输入时,2020-08-02/2020-08-03
我希望有两个匹配项,但我只得到一个,因为/
成为第一个匹配项的一部分,并且正则表达式无法(?:[^0-9]+|^)
在剩余的输入中找到并丢弃其余部分。
在这里,您可以看到我的正则表达式的更多示例,其中包含长输入。正如你所看到的,有些2020-07-21
地方没有找到。
解决方案
你的表情看起来有点复杂。不确定我是否掌握了您的所有要求,但这似乎适用于您的所有示例:
(?<=\D|^)[0-9]{4}[\.-][0-9]{2}[\.-][0-9]{2}(?=\D)(_[0-9]{2}[\:\.-][0-9]{2}[:\.-][0-9]{2})?
- 日期被识别为
.
和-
作为分隔符(向后/向前看以排除尾随数字) _
在with.
和分隔符之后可以选择识别时间-
(:
您打算检测时间吗?)
编辑:现在我意识到你可能只是想使用后向和前瞻而不是非捕获组:
(?<=[^0-9]|^)([0-9]{4})[.-]?([0-9]{2})[.-]?([0-9]{2})(?:[_ \-]?([0-9]{2})[\-.;_]?([0-9]{2})[\-.;_]?([0-9]{2}))?(?=[^0-9]+|$)
推荐阅读
- javascript - 在 Jquery 页面重定向上预填充 Django 表单
- android - com.google.firebase.database.DatabaseException:无法在显示列表视图中将 java.util.HashMap 类型的值转换为字符串
- javascript - 如何在 ace-editor 中执行用户的代码
- python - 计算熊猫数据框中一列的 6 小时平均值,将值绘制为图形上的文本
- r - 如何通过取 R 中的两列来填充 NA?
- sql-server - 我可以将相关表添加到 PowerApps Canvas 应用程序吗?
- java - Jackson 为 hashmap 指定类型或日期格式
- javascript - 如何在 Python 中使用 javascript 获取数据?
- jquery - 检测单击jQuery中没有类的元素
- java - Finch Robot - 如何循环特定的代码行?(爪哇)