捕获两个空格之间的数字 (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+
我看到有些人已经帮助过你,但是如果你出于某种原因想要一个替代的工作方式,那么这里也可以工作:)
.+ \d+\/\d+\/\d+ (\d+[\.\d]*)
所以 .+ 匹配任何加上第一个 space
然后 \d+/\d+/\d+ 是日期解析加上 space
捕获组是数字,如您所见,我将最后一部分设为可选,因此可以匹配浮点值和普通值。希望这对您有所帮助!
Capture number between two whitespaces
空格匹配 \s
,非空格匹配 \S
。
所以,你可以使用的是:
\d{2}\/\d{2}\/\d{2} +(\S+)
^^^
1+ 个非空白符号被捕获到组 1 中。
如果 - 由于某种原因 - 您只需要获取整个匹配项的值,请使用您的回顾方法:
(?<=\d{2}\/\d{2}\/\d{2} )\S+
或者 - 如果您使用的是 PCRE - 您可以利用匹配重置运算符 \K
:
\d{2}\/\d{2}\/\d{2} +\K\S+
^^
注意:\K
和捕获组方法允许日期后有 1 个或多个空格,因此更加灵活。
无需捕获,您可以通过后视使整个匹配成为目标文本:
(?<=\d\d(\/\d\d){2} )\S+
这与 "date like" 部分之后的第一个非空白系列相匹配。
另请注意 "date like" 模式长度的减少。您可以考虑在您使用的任何解决方案中使用正则表达式的这一部分。
我有以下数据:
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+
我看到有些人已经帮助过你,但是如果你出于某种原因想要一个替代的工作方式,那么这里也可以工作:)
.+ \d+\/\d+\/\d+ (\d+[\.\d]*)
所以 .+ 匹配任何加上第一个 space 然后 \d+/\d+/\d+ 是日期解析加上 space 捕获组是数字,如您所见,我将最后一部分设为可选,因此可以匹配浮点值和普通值。希望这对您有所帮助!
Capture number between two whitespaces
空格匹配 \s
,非空格匹配 \S
。
所以,你可以使用的是:
\d{2}\/\d{2}\/\d{2} +(\S+)
^^^
1+ 个非空白符号被捕获到组 1 中。
如果 - 由于某种原因 - 您只需要获取整个匹配项的值,请使用您的回顾方法:
(?<=\d{2}\/\d{2}\/\d{2} )\S+
或者 - 如果您使用的是 PCRE - 您可以利用匹配重置运算符 \K
:
\d{2}\/\d{2}\/\d{2} +\K\S+
^^
注意:\K
和捕获组方法允许日期后有 1 个或多个空格,因此更加灵活。
无需捕获,您可以通过后视使整个匹配成为目标文本:
(?<=\d\d(\/\d\d){2} )\S+
这与 "date like" 部分之后的第一个非空白系列相匹配。
另请注意 "date like" 模式长度的减少。您可以考虑在您使用的任何解决方案中使用正则表达式的这一部分。