You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

正则表达式无法捕获换行后带前置空格的金额数值问题求助

问题解决:捕获带前导空格的金额数值

问题描述

现有文本内容:

The string we have right now is:
DB GOALS: DISADVANTAGED BUSINESS ENTERPRISE - 6.0%
PROPOSALS ISSUED 9 FUND TOTAL , , 0
TOTAL NUMBER OF WORKING DAYS 30

NUMBER OF BIDDERS 4 ENGINEERS EST 1,674,885.00 AMOUNT OVER
177,014.00 PERCENT OVER EST 10.57
PROGRAM ELEMENTS

使用正则模式:

(AMOUNT OVER|AMOUNT UNDER)[\n\r\s]+(?:^|\s)(?=.)((?:0|(?:[1-9](?:\d*|\d{0,2}(?:,\d{3})*)))?(?:\.\d*[0-9])?)(?!\S)

无法捕获AMOUNT OVER换行后带前导空格的177,014.00,移除数值前的空格后正则可正常工作,需调整正则直接捕获该内容。

问题原因

原正则中[\n\r\s]+会匹配AMOUNT OVER之后的所有空白(包括换行和数值前的空格),导致后续的(?:^|\s)无匹配项——此时已到达数值的第一个字符1,前面既无行首(换行和空格已被[\n\r\s]+匹配)也无剩余空格,正则匹配失败。

解决方案

移除正则中多余的(?:^|\s)断言,让[\n\r\s]+匹配完所有空白后直接捕获数值部分,调整后的正则:

(AMOUNT OVER|AMOUNT UNDER)\s+((?:0|(?:[1-9](?:\d*|\d{0,2}(?:,\d{3})*)))?(?:\.\d*[0-9])?)(?!\S)

也可简化数值匹配逻辑(更简洁且兼容带千分位、小数的金额):

(AMOUNT OVER|AMOUNT UNDER)\s+(\d+(?:,\d{3})*(?:\.\d+)?)

验证说明

调整后的正则会先匹配AMOUNT OVER或AMOUNT UNDER,再匹配任意数量的空白(含换行、前导空格),最后直接捕获符合格式的金额数值,无需手动移除空格即可正常匹配目标内容。

内容的提问来源于stack exchange,提问作者Pepa

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.02 02:51:56