^(?:([0-9]+):)??(?:([0-9]+):)?([0-9]+)(?:[.,]([0-9]+))?[^0-9]* $
这是我的教授在R工作室为我写的一个正则表达式,用于从网站获取奥运会结果。有没有人能详细解释一下正则表达式的每个部分到底是做什么的,以及它们是如何协同工作的。
使用此正则表达式的一些结果示例如下:
3:49:03、1:21:08、49,03、3:42,02。
提前感谢您的帮助。
发布于 2019-03-31 21:13:43
让我们从所使用的语法的图例开始:
^是字符串的开始,而不是0-9,方括号内的插入符号将取反more* 0或more$ non capturing group of 中的一个方块中的模式
现在让我们来分析一下你所拥有的:
^(?:([0-9]+):)??(?:([0-9]+):)?([0-9]+)(?:.,)?[^0-9]* $
^字符串(?:pattern:)模式的开头,后跟冒号(无捕获(?:)部分) ([0-9]+)数字0-9,一次或多次,captured
捕获前面的组出现0次或1次,非greedy
(?:pattern:)模式后跟冒号(no ?? (?:) part) ([0-9]+)数字0-9,一次或多次,captured
前一组出现0次或1次,字符串数字0-9,一次或多次,字符串点或逗号,非字符串前一组出现0次或1次,非数字0-9,匹配0次或多次,字符串末尾
? 发布于 2019-03-31 21:30:16
中的一个
我不明白为什么他费心去包括字符串的结尾和开头,也不明白为什么他用了那么多?
我可能会像这样寻找它:
(([0-9]+)([:,.]?))*([0-9]+)意思是,((0-9+)(:,.?)) =(至少一个数字后面跟一个可能的分隔符(1个:,或.)),这在任何时间(0,1,...,n)重复,后面跟着至少一个数字。这也将匹配不带分隔符的数字,例如12。对于至少有一个分隔符的数字,请将*替换为+。
使用stringr,提取将如下所示:
library(stringr)
str_extract(pattern = '(([0-9]+)([:,.]?))*([0-9]+)', string= 'hello, this is a time 02:04,34 in a sentence')输出将是"02:04,34“
https://stackoverflow.com/questions/55441191
复制相似问题