正则表达式求助:匹配Phase ID后的首个数字并在空格处停止
问题
给定以下示例文本:
Phase ID: 4 333 stuff Phase ID: 4.5 333 stuff Phase ID: 44.55 333 stuff
需要仅捕获“Phase ID:”后的首个数字(包含整数和小数),但当前使用的正则表达式:
Phase ID:\K.*([0-9]*\.[0-9]|[0-9][^\s]+)
会同时捕获后续的333,求修改方案。
解决方案
使用以下正则表达式即可精准匹配目标数字:
Phase ID:\K\d+(?:\.\d+)?
原问题分析与修改说明
原表达式的问题在于.*会贪婪匹配"Phase ID:"后到目标数字之间的所有内容,且[^\s]+的范围太宽泛,会匹配到后续的非空白字符(比如333)。修改后的表达式逻辑更精准:
Phase ID:\K:保留原逻辑,跳过"Phase ID:"的匹配结果,只保留后续需要的内容\d+:匹配1个及以上数字,对应整数部分(?:\.\d+)?:非捕获组,可选匹配小数部分——\.匹配小数点,\d+匹配小数点后的数字,?表示该部分可省略,兼容整数和小数两种情况- 整个表达式会在遇到第一个空格时停止匹配,完美避开后续的
333等无关内容
内容的提问来源于stack exchange,提问作者Barry Ralphs
相关产品推荐
相关产品推荐

