regex - 查找多种时间戳格式的正则表达式模式避免单独使用单个数字
问题描述
我正在尝试创建一个正则表达式模式,它将找到多种时间格式,例如:
我希望这些输出匹配:
11:00PM - 11:00pm
11:00 PM - 11:00pm
11.PM
11.pm
21:00AM - 21am
21:00
11:00
我希望正则表达式匹配上面的模式,但它目前确实如此,这也找到了 pm、PM、am、AM 和两位数,我该如何避免这种情况?意味着单独的数字和 PM,AM 将不被接受?
例如:
PM
AM
11
21
1
我的正则表达式也将接受。
编辑 我的目的是避免提及以下情况:
PM
AM
11
21
1
编辑 2
我已经解决了 match 的问题,pm, am, PM, AM
但是它仍然匹配 1 位或 2 位数字:
(\d{1,2})([.:](\d{1,2}))?[ .]?(am|pm|PM|AM)?
这是我当前模式的链接:
解决方案
以下正则表达式模式似乎捕获了您想要的所有内容,同时排除了您不想要的内容:
^\d+(?:(?:\.|:\d+)[ ]*(?:am|AM|pm|PM)?|(?:am|AM|pm|PM))(?:[ ]*-[ ]*\d+(?:(?:\.|:\d+)[ ]*(?:am|AM|pm|PM)?|(?:am|AM|pm|PM)))*$
演示
这是一个 R 脚本grepl
,用于验证该模式在 R 中是否有效:
x <- c("11:00PM - 11:00pm", "11:00 PM - 11:00pm", "11.PM", "11.pm", "21:00AM - 21am",
"21:00", "11:00", "PM", "AM", "11", "21", "1")
grepl("^\\d+(?:(?:\\.|:\\d+)[ ]*(?:am|AM|pm|PM)?|(?:am|AM|pm|PM))(?:[ ]*-[ ]*\\d+(?:(?:\\.|:\\d+)[ ]*(?:am|AM|pm|PM)?|(?:am|AM|pm|PM)))*$", x)
[1] TRUE TRUE TRUE TRUE TRUE TRUE TRUE FALSE FALSE FALSE FALSE FALSE
推荐阅读
- javascript - AWS S3 CreatePresignedPost 未生成某些必填字段
- sql - 如何获取用户在 PLSQL 中创建的所有确定性函数的列表?
- python - jinja2.exceptions.UndefinedError: 'form' is undefined error in python, Flask
- javascript - Facebook Video Embed Controll with Javascript (播放/暂停)
- django - Nginx 代理服务器到另一个代理服务器网关超时
- python - 调用flask googlemaps api时列表索引超出范围
- maven - Maven DependencyResoulutionException 错误
- scala - java.util.Map 上的“应该包含 allOf”?
- wordpress - Wordpress / FB 冲突(Cookie 通知)- 不工作 添加到购物车
- java - OpenCV for Android 中的矩阵运算