我有以下数据:
thinning
我希望从中提取数字2.50。我已设法使用以下RegEx执行此操作:
SOMEDATA .test 01/45/12 2.50 THIS IS DATA
然而,这对于这样的输入不起作用:
(?<=\d{2}\/\d{2}\/\d{2} )\d+.\d+
在这种情况下,我想提取数字2500.
我似乎无法为此找出正则表达式规则。有没有办法在两个空格之间提取东西?那么在日期之后提取文本/数字直到下一个空格?我所知道的是,日期将始终具有相同的格式,文本后面总会有一个空格,然后是我要提取的数字后面的空格。
有人可以帮我解决这个问题吗?
答案 0 :(得分:2)
在两个空格之间捕获数字
空格与\s
匹配,非空格与\S
匹配。
所以,你可以使用的是:
\d{2}\/\d{2}\/\d{2} +(\S+)
^^^
请参阅regex demo
1 +非空白符号被捕获到第1组。
如果 - 由于某种原因 - 您只需要将整个值匹配,请使用您的lookbehind方法:
(?<=\d{2}\/\d{2}\/\d{2} )\S+
或者 - 如果您使用PCRE - 您可以利用匹配重置运算符\K
:
\d{2}\/\d{2}\/\d{2} +\K\S+
^^
请参阅another demo
注意:\K
和捕获组方法在日期之后允许一个或多个空格,因此更灵活。
答案 1 :(得分:1)
只需将分形部分设为可选:
(?<=\d{2}\/\d{2}\/\d{2} )\d+(?:\.\d+)?
演示:https://regex101.com/r/jH3pU7/1
更新以下评论中的说明:
要匹配由空格包围的任何(但空格)并按日期使用前缀:
(?<=\d{2}\/\d{2}\/\d{2} )\S+
答案 2 :(得分:1)
我看到有些人已经帮助过你了,但如果你出于某种原因想要一个替代的工作,那么这也是有用的:)
.+ \d+\/\d+\/\d+ (\d+[\.\d]*)
所以。+匹配任何东西加上第一个空格 然后\ d + / \ d + / / \ d +是日期解析加空格 捕获组是数字,如您所见,我将最后一部分设为可选,因此可以匹配浮点值和正常值。希望这有帮助!
答案 3 :(得分:1)
您可以通过使用后面的视图,将整个匹配作为目标文本,而不是捕获:
(?<=\d\d(\/\d\d){2} )\S+
这匹配了“date like”部分之后的第一个非空白系列。
还要注意“日期喜欢”模式的长度减少。您可以考虑在您使用的任何解决方案中使用正则表达式的这一部分。