捕获两个空格之间的数字 (RegEx)

Capture number between two whitespaces (RegEx)

我有以下数据:

SOMEDATA .test 01/45/12 2.50 THIS IS DATA

我想从中提取数字 2.50。我已设法使用以下 RegEx 执行此操作:

(?<=\d{2}\/\d{2}\/\d{2} )\d+.\d+ 

然而,这不适用于这样的输入:

SOMEDATA .test 01/45/12 2500 THIS IS DATA

在这种情况下,我想提取数字 2500。

我似乎无法找出正则表达式规则。有没有办法在两个 space 之间提取一些东西?那么在日期之后提取 text/number 直到下一个 whitespace ?我所知道的是日期将始终具有相同的格式,并且在文本之后总是会有一个 space,然后在我要提取的数字之后会有一个 space。

有人可以帮我解决这个问题吗?

只需将分形部分设为可选:

(?<=\d{2}\/\d{2}\/\d{2} )\d+(?:\.\d+)?

演示:https://regex101.com/r/jH3pU7/1

更新评论中的以下说明:

要匹配被 space 包围并以日期为前缀的任何内容(但 space)使用:

(?<=\d{2}\/\d{2}\/\d{2} )\S+

演示:https://regex101.com/r/jH3pU7/3

我看到有些人已经帮助过你,但是如果你出于某种原因想要一个替代的工作方式,那么这里也可以工作:)

.+ \d+\/\d+\/\d+ (\d+[\.\d]*)

所以 .+ 匹配任何加上第一个 space 然后 \d+/\d+/\d+ 是日期解析加上 space 捕获组是数字,如您所见,我将最后一部分设为可选,因此可以匹配浮点值和普通值。希望这对您有所帮助!

证明:https://regex101.com/r/fY3nJ2/1

Capture number between two whitespaces

空格匹配 \s,非空格匹配 \S

所以,你可以使用的是:

\d{2}\/\d{2}\/\d{2} +(\S+)
                      ^^^

regex demo

1+ 个非空白符号被捕获到组 1 中。

如果 - 由于某种原因 - 您只需要获取整个匹配项的值,请使用您的回顾方法:

(?<=\d{2}\/\d{2}\/\d{2} )\S+

或者 - 如果您使用的是 PCRE - 您可以利用匹配重置运算符 \K:

\d{2}\/\d{2}\/\d{2} +\K\S+
                     ^^

another demo

注意\K 和捕获组方法允许日期后有 1 个或多个空格,因此更加灵活。

无需捕获,您可以通过后视使整个匹配成为目标文本:

(?<=\d\d(\/\d\d){2} )\S+

这与 "date like" 部分之后的第一个非空白系列相匹配。

另请注意 "date like" 模式长度的减少。您可以考虑在您使用的任何解决方案中使用正则表达式的这一部分。