如何使用Regex捕获目标文本中的4.75数值?
精准捕获4.75的正则写法
针对你提供的文本结构,以下几个正则表达式可以精准定位并捕获目标数值4.75:
方案1:严格匹配金额格式
(?<=Interest Rate\s*\n\s*\$\d[,\d]+\s)(\d+\.\d+)(?=\s%)
匹配逻辑:
(?<=Interest Rate\s*\n\s*\$\d[,\d]+\s):后行断言,确保匹配位置前是Interest Rate、任意换行/空白、标准格式的贷款金额(以$开头,包含数字和逗号),最后是空格(\d+\.\d+):捕获目标小数数值(即4.75)(?=\s%):先行断言,确保匹配位置后是空格加%符号
方案2:兼容更多空白情况
如果文本中各部分的空格数量不固定,可以用更灵活的版本:
(?<=Interest Rate\s*\n.*?\s)(\d+\.\d+)(?=\s*%)
匹配逻辑:
(?<=Interest Rate\s*\n.*?\s):后行断言,匹配Interest Rate之后的换行,跳过任意内容到最后一个空格(即贷款金额后的空格)(\d+\.\d+):捕获目标小数数值(?=\s*%):先行断言,允许数值和%之间有任意数量的空白
为什么之前的正则失效?
- 第一个正则
(?<=Interest Rate\s*\n*)([^\s]+).+(?=%)中,[^\s]+会匹配贷款金额$336,550,后续.+又覆盖到%前的内容,导致捕获范围过大 - 第二个正则
([^\s]+).(?=%)没有绑定Interest Rate的上下文,会匹配所有%符号前的非空白内容,因此产生多个匹配
内容的提问来源于stack exchange,提问作者kcodes
相关产品推荐
相关产品推荐

