regex - 正则表达式捕获点被数字包围
问题描述
我有这个非常复杂的正则表达式选择,几乎可以工作。我似乎对理解非捕获组的工作方式有疑问。我已经阅读了 wiki,但似乎仍然无法掌握如何正确使用它们(或者这是错误的用例?)
\b(?:[0-9]+) ?(\.) ?(?:[0-9]+)(?! ?(uur|(u|h)))\b
如果我有以下一组陈述,我只想要“。” 前4个被选中。ATM 正则表达式捕获数字 + '。前4个。
0.22
15.48
8.50
048948.00000
05:23 uur
06.35 u
15.48u
0.55u
11.00h
5.54 uur
23: 31
08 :40 uur
我已经阅读(并尝试过)使用非捕获组,但它似乎没有多大帮助。
任何人都知道如何实现这一目标并愿意解释一下它为什么起作用?
也不确定这是否有帮助,但我有一个链接来测试我制作的正则表达式:https ://regexr.com/5dc6q
解决方案
您可以使用
\b[0-9]+ ?\K\.(?= ?[0-9]+(?! ?(?:uur|[uh]))\b)
查看正则表达式演示
正则表达式详细信息
\b
- 单词边界[0-9]+ ?
- 一个或多个数字,然后是一个可选空格\K
- 一个匹配重置运算符,丢弃到目前为止匹配的所有文本\.
- 一个点(?= ?[0-9]+(?! ?(?:uur|[uh]))\b)
- 紧随其后的位置?
- 一个可选空间[0-9]+
- 一位或多位数字(?! ?(?:uur|[uh]))
- 后面没有可选空格,uur
或u
h
\b
- 单词边界
推荐阅读
- python - 计数奇偶数功能
- tableau-desktop - 如何使用 Dateparse 函数创建一年到一年的日期范围,即 2020-2021
- sql - 如何在选定的字符串中查找数字?
- python - Python 类变量在使用插槽时会覆盖所有实例变量 - 为什么?
- sql - 使用 PostgreSQL PL/pgSQL 在 For 循环中添加月份
- ios - 为什么点击键盘时iOS应用程序崩溃?
- html - 自定义引导选项卡
- python - 从最大化最小距离的一组 3D 点中采样 N 个点
- docker - `openssl` 不适用于 `haproxy` docker 镜像
- ruby-on-rails - Puma 服务器进入引导循环