Regex 用于捕获时间的正则表达式,冒号前没有两个数字,只有一个

Regex 用于捕获时间的正则表达式,冒号前没有两个数字,只有一个,regex,r,grepl,Regex,R,Grepl,我的正则表达式似乎应该可以工作,但却返回了意想不到的结果 我用的是R。如果你不使用这些,别担心,我认为这和其他一些风格的正则表达式非常相似。R文档说{n,m}语法应该是有效的:{n,m} 前一项至少匹配n次,但不超过m次。” re开始时的*是贪婪的,因此*\\s*匹配时间的第一个数字之前的所有内容(可能需要的最长时间,仍然可以找到匹配项)。改用[^\\d]*\\s*。以下是一种使用我维护的软件包qdapRegex(>=v.0.2.0)中的rm\u时间的方法: 以及以下的象形文字解释: 如果您将第

我的正则表达式似乎应该可以工作,但却返回了意想不到的结果

我用的是R。如果你不使用这些,别担心,我认为这和其他一些风格的正则表达式非常相似。R文档说{n,m}语法应该是有效的:{n,m} 前一项至少匹配n次,但不超过m次。”


re开始时的
*
是贪婪的,因此
*\\s*
匹配时间的第一个数字之前的所有内容(可能需要的最长时间,仍然可以找到匹配项)。改用
[^\\d]*\\s*

以下是一种使用我维护的软件包qdapRegex(>=v.0.2.0)中的
rm\u时间的方法:

以及以下的象形文字解释:


如果您将第一个
\\s*
设置为非贪婪,即
\\s*?
,则该功能将起作用

vec <- c("some text 10:47 AM text", "another text 3:04 AM text")
sub(".*\\s*?(\\d{1,2}:\\d{2}\\s*[APM]{2})\\s*.*", "\\1", vec)
# [1] "10:47 AM" "3:04 AM" 

vec请提供一些示例以及预期的输出。我将
[AP]M
而不是
[APM]{2}
以避免错误匹配(AA)
x <- "I'm getting 3:04 AM just fine, but for 10:47 AM I'm getting 0:47 AM instead."

library(qdapRegex)
rm_default(x, extract=TRUE, pat = "@rm_time2")
[1] "3:04 AM"  "10:47 AM" "0:47 AM"
grab("@rm_time2")
## [1] "(\\d{0,2}:\\d{2}(?:[:.]\\d+)?)(\\s+(([AP]\\.{0,1}M\\.{0,1})|([ap]\\.{0,1}m\\.{0,1})))"
vec <- c("some text 10:47 AM text", "another text 3:04 AM text")
sub(".*\\s*?(\\d{1,2}:\\d{2}\\s*[APM]{2})\\s*.*", "\\1", vec)
# [1] "10:47 AM" "3:04 AM"