首页 > 解决方案 > 正则表达式捕获点被数字包围

问题描述

我有这个非常复杂的正则表达式选择,几乎可以工作。我似乎对理解非捕获组的工作方式有疑问。我已经阅读了 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

标签: regex

解决方案


您可以使用

\b[0-9]+ ?\K\.(?= ?[0-9]+(?! ?(?:uur|[uh]))\b)

查看正则表达式演示

正则表达式详细信息

  • \b- 单词边界
  • [0-9]+ ?- 一个或多个数字,然后是一个可选空格
  • \K- 一个匹配重置运算符,丢弃到目前为止匹配的所有文本
  • \.- 一个点
  • (?= ?[0-9]+(?! ?(?:uur|[uh]))\b)- 紧随其后的位置
    • ?- 一个可选空间
    • [0-9]+- 一位或多位数字
    • (?! ?(?:uur|[uh]))- 后面没有可选空格,uuruh
    • \b- 单词边界

推荐阅读