首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >从小时跟踪字符串中捕获完整的十进制数

从小时跟踪字符串中捕获完整的十进制数
EN

Stack Overflow用户
提问于 2015-12-02 05:59:43
回答 1查看 63关注 0票数 1

我有这样的内容:

代码语言:javascript
运行
复制
2015 11-20 -- #TU 10:30-6 (7.5 hrs)
2015 11-19 -- #TU 10-11; 1-7 (7 hrs)
2015 11-18 -- #TU 9:30-4 (6.5 hrs)

我想记录这个月的工作时间和客户代码。

我用它来匹配本月开始的所有行:

代码语言:javascript
运行
复制
\2015 11-.*#TU

然后添加以下内容,目的是捕获一个或多个与\d数字或文字.匹配的字符。

代码语言:javascript
运行
复制
\2015 11-.*#TU.*([\d\.]+)\g

...I也尝试了其他一些变体,但它只捕获了776

如何捕获7.576.5

您可以在Regex101:https://regex101.com/r/hU3xA0/1上试一试

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-12-02 07:16:28

试一试:

\2015 11-.*#TU.*\(([\d\.]+)\g

解释是怎么回事

它不适用于您的原因是因为在.*之后的贪婪的#TU。一个贪婪的量词将匹配尽可能多的字符,同时允许表达式的其余部分保持匹配。处理正则表达式的方式乍一看有点不直观。

以以下输入为例:2015 11-20 -- #TU 10:30-6 (7.5 hrs)

--下面是您可能认为正则表达式在字符串上工作的方式

2015 11-.*#TU.*应该与2015 11-20 -- #TU 10:30-6 (匹配

然后

([\d\.]+)应该与7.5匹配

事实上,发生什么事是这个

2015 11-.*#TU.*匹配2015 11-20 -- #TU 10:30-6 (7.

然后

([\d\.]+)5匹配

为什么我的例子有用?

因为我指定了一个文字(字符来终止贪婪的量词。我们不是说“在最后一个数字之前尽可能多地匹配”,而是“尽可能多地匹配,直到你到达一个(字符,然后匹配至少一个数字或点”。

奖金改进

2015 11-.*#TU.*\((\d+(\.\d+)?)

在这里,我将您的字符类[\d\.]更改为\d+(\.\d+)?。这是一个更严格的匹配,因为您会发现它不会匹配错误的输入,例如2015 11-20 -- #TU 10:30-6 (...1.23... hrs)2015 11-20 -- #TU 10:30-6 (.5 hrs)。当然,我假设半小时将表示为0.5而不是.5

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

https://stackoverflow.com/questions/34035881

复制
相关文章

相似问题

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