如何从银行交易短信提取商户名 现有正则无法生效如何修改?
银行短信商户名提取正则调整方案
原正则失效原因
- 前导匹配逻辑错误:原正则非捕获组
(?:\\sInfo.\\s*)要求Info字段后必须存在空白字符,但测试短信中Info:后直接拼接商户名称,无空白间隔,导致前缀匹配失败 - 商户名匹配规则过严:原捕获组仅支持最多2段字符、1个可选空格的格式,无法适配多单词组成的商户名,字符覆盖范围也不足以匹配常见商户名格式
调整后正则(Java语法)
Pattern.compile("(?i)(?:\\sInfo:)([A-Za-z0-9\\s]+)(?=\\.)");
规则说明
- 保留
(?i)大小写不敏感匹配规则 - 非捕获组
(?:\\sInfo:)精准匹配短信中的固定前缀Info:,适配实际短信格式 - 捕获组
([A-Za-z0-9\\s]+)支持匹配由字母、数字、空格组成的多单词商户名 - 正向预查
(?=\\.)自动在后续第一个英文句号位置截断,排除Avbl等无关内容
适配效果
针对提供的测试短信执行匹配后,捕获组1的输出结果为GOOGLE CLOUD,完全符合提取要求。
如果需要兼容带*、-等特殊字符的商户名,可以将捕获组规则调整为([A-Za-z0-9*\\-\\s]+)即可。
内容的提问来源于stack exchange,提问作者AVSTech andorid
相关产品推荐
相关产品推荐

