如何使用Regex从短信中提取余额、可用额度等金额信息
短信余额类金额提取正则调整方案
你原有正则的核心问题是匹配规则[A-Za-z0-9]+无法覆盖金额中包含的千位分隔符逗号、小数点,也没有处理关键词和金额之间的非数字衔接内容,调整方案如下:
合并提取所有余额/额度的正则
如果需要同时匹配账户余额、信用卡余额、可用信用额度三类金额,可以直接使用合并规则:
(?i)(?:balance|credit\s+limit)\D*?(Rs\.?\s*[\d,]+\.?\d*)
规则说明:
(?i):开启不区分大小写匹配,兼容短信里大小写混用的关键词写法(?:balance|credit\s+limit):非捕获组,匹配「余额」「信用额度」两类目标关键词\D*?:非贪婪匹配所有非数字字符,跳过关键词和金额之间的其他衔接文字- 捕获组内的规则适配印度卢比金额格式:匹配Rs/Rs.前缀,可兼容前缀后带空格的情况,同时支持金额的千位逗号、小数点格式
分开匹配的正则(和你原有写法逻辑对齐)
- 提取各类余额:
(?i)\sbalance\D*?(Rs\.?\s*[\d,]+\.?\d*) - 提取信用额度:
(?i)\scredit\s+limit\D*?(Rs\.?\s*[\d,]+\.?\d*)
提取效果
用你提供的3条短信测试,可准确捕获到所有目标金额:
- Rs. 13086.18
- Rs.78,468
- Rs. 173281.31
如果只需要提取纯数字金额不需要Rs前缀,将捕获组的位置调整到Rs前缀之后即可:
(?i)(?:balance|credit\s+limit)\D*?Rs\.?\s*([\d,]+\.?\d*)
调整后捕获结果为纯数字:13086.18、78,468、173281.31
内容的提问来源于stack exchange,提问作者AVSTech andorid
相关产品推荐
相关产品推荐

