R正则表达式:从字符串中删除时间
发布时间:2020-12-14 05:59:47 所属栏目:百科 来源:网络整理
导读:我试图从字符串中删除/提取时间.逻辑是我抓住的东西: 必须以0-2位开头 必须跟着一个冒号 可能后跟冒号或句号,但不必 可以跟随1个无限数字(如果先前条件为真) 这是一个MWE和我尝试过的.我快到了,但我不想要“6:33”.要被提取,而是“6:33”,因为冒号或逗号的
我试图从字符串中删除/提取时间.逻辑是我抓住的东西:
>必须以0-2位开头 这是一个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 注意:我删除了转义括号,因为我不清楚为什么它们首先被使用. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |