加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

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

发布时间:2020-12-14 05:59:47 所属栏目:百科 来源:网络整理
导读:我试图从字符串中删除/提取时间.逻辑是我抓住的东西: 必须以0-2位开头 必须跟着一个冒号 可能后跟冒号或句号,但不必 可以跟随1个无限数字(如果先前条件为真) 这是一个MWE和我尝试过的.我快到了,但我不想要“6:33”.要被提取,而是“6:33”,因为冒号或逗号的
我试图从字符串中删除/提取时间.逻辑是我抓住的东西:

>必须以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

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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读