首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >有人能告诉我这个正则表达式的每一部分是什么吗?

有人能告诉我这个正则表达式的每一部分是什么吗?
EN

Stack Overflow用户
提问于 2019-03-31 21:06:32
回答 2查看 107关注 0票数 0

^(?:([0-9]+):)??(?:([0-9]+):)?([0-9]+)(?:[.,]([0-9]+))?[^0-9]* $

这是我的教授在R工作室为我写的一个正则表达式,用于从网站获取奥运会结果。有没有人能详细解释一下正则表达式的每个部分到底是做什么的,以及它们是如何协同工作的。

使用此正则表达式的一些结果示例如下:

3:49:031:21:0849,033:42,02

提前感谢您的帮助。

EN

回答 2

Stack Overflow用户

发布于 2019-03-31 21:13:43

让我们从所使用的语法的图例开始:

  • ^是字符串的开始,而不是0-9,方括号内的插入符号将取反more
  • * 0或more
  • $ non capturing group of

中的一个方块中的模式

现在让我们来分析一下你所拥有的:

^(?:([0-9]+):)??(?:([0-9]+):)?([0-9]+)(?:.,)?[^0-9]* $

  1. ^字符串
  2. (?:pattern:)模式的开头,后跟冒号(无捕获(?:)部分)
    • ([0-9]+)数字0-9,一次或多次,captured

捕获前面的组出现0次或1次,非greedy

  • (?:pattern:)模式后跟冒号(no
  1. ?? (?:) part)
    • ([0-9]+)数字0-9,一次或多次,captured

前一组出现0次或1次,字符串数字0-9,一次或多次,字符串点或逗号,非字符串前一组出现0次或1次,非数字0-9,匹配0次或多次,字符串末尾

  1. ?
票数 0
EN

Stack Overflow用户

发布于 2019-03-31 21:30:16

  • ^字符串的开头
  • (0-9+)至少有一个数字0,...9
  • (x)?至多x
  • $字符串的末尾

中的一个

我不明白为什么他费心去包括字符串的结尾和开头,也不明白为什么他用了那么多?

我可能会像这样寻找它:

代码语言:javascript
复制
(([0-9]+)([:,.]?))*([0-9]+)

意思是,((0-9+)(:,.?)) =(至少一个数字后面跟一个可能的分隔符(1个:,或.)),这在任何时间(0,1,...,n)重复,后面跟着至少一个数字。这也将匹配不带分隔符的数字,例如12。对于至少有一个分隔符的数字,请将*替换为+。

使用stringr,提取将如下所示:

代码语言:javascript
复制
library(stringr)
str_extract(pattern = '(([0-9]+)([:,.]?))*([0-9]+)', string= 'hello, this is a time 02:04,34 in a sentence')

输出将是"02:04,34“

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55441191

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档