R正则表达式:从字符串中删除时间

前端之家收集整理的这篇文章主要介绍了R正则表达式:从字符串中删除时间前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我试图从字符串中删除/提取时间.逻辑是我抓住的东西:

>必须以0-2位开头
>必须跟着一个冒号
>可能后跟冒号或句号,但不必
>可以跟随1个无限数字(如果先前条件为真)

这是一个MWE和我尝试过的.我快到了,但我不想要“6:33”.要被提取,而是“6:33”,因为冒号或逗号的出现必须跟随一个或多个数字.在这种情况下,句号的结尾不是时间的一部分.

text.var <-  c("R uses 1:5 for 1,2,3,4,5.","At 3:00 we'll meet up and leave by 4:30:20.","We'll meet at 6:33.","He ran it in :22.34.")

pattern <- "\\(?[0-9]{0,2}\\)?\\:\\(?[0-9]{2}\\)?\\(?[:.]{0,1}\\)?\\(?[0-9]{0,}\\)?"

regmatches(text.var,gregexpr(pattern,text.var,perl = TRUE))

## [[1]]
## character(0)
## 
## [[2]]
## [1] "3:00"    "4:30:20"
## 
## [[3]]
## [1] "6:33."
## 
## [[4]]
## [1] ":22.34"

期望的输出

## [[1]]
## character(0)
## 
## [[2]]
## [1] "3:00"    "4:30:20"
## 
## [[3]]
## [1] "6:33"
## 
## [[4]]
## [1] ":22.34"

解决方法

如果我理解正确,您可以使用以下方法解决您的问题.

regmatches(text.var,gregexpr('\\d{0,2}:\\d{2}(?:[:.]\\d+)?',perl=T))

说明:

\d{0,2}   # digits (0-9) (between 0 and 2 times)
:         # ':'
\d{2}     # digits (0-9) (2 times)
(?:       # group,but do not capture (optional):
  [:.]    #   any character of: ':','.'
  \d+     #   digits (0-9) (1 or more times)
)?        # end of grouping

注意:我删除了转义括号,因为我不清楚为什么它们首先被使用.

猜你在找的正则表达式相关文章