如何在Ruby字符串的货币代码与对应金额之间添加分隔空格
Ruby 货币代码与金额紧邻空格插入解决方案
原有正则/\d+/匹配所有连续数字,在所有数字前后加空格,会拆分小数、误改字母数字混合的编号(如123X87),不符合需求。
核心思路
利用ISO 4217标准国际货币代码均为3位大写英文字母的规则,仅匹配「3位大写字母紧邻数字」的场景,在二者中间插入空格,不会干扰其他内容。
实现代码
# 测试样例1 str = "I have purchased and item at USD500.80 from online store store 123X87" processed_str = str.gsub(/([A-Z]{3})(\d)/, '\1 \2') # 输出结果:I have purchased and item at USD 500.80 from online store store 123X87 # 测试样例2(EUR) str2 = "I have purchased and item at EUR500.80 from online store store 123X88" processed_str2 = str2.gsub(/([A-Z]{3})(\d)/, '\1 \2') # 输出结果:I have purchased and item at EUR 500.80 from online store store 123X88 # 测试样例3(GBP) str3 = "I have purchased and item at GBP500.80 from online store store 123X88" processed_str3 = str3.gsub(/([A-Z]{3})(\d)/, '\1 \2') # 输出结果:I have purchased and item at GBP 500.80 from online store store 123X88
正则说明
([A-Z]{3}):第一个捕获组,匹配连续3个大写英文字母,覆盖绝大多数主流国际货币代码格式(\d):第二个捕获组,匹配紧跟在3位大写字母后的第一个数字'\1 \2':替换规则,保留两个捕获组的原有内容,在二者中间插入一个空格
如果业务场景中存在非3位的特殊货币代码,调整正则中{3}的匹配位数即可适配。
内容的提问来源于stack exchange,提问作者siv rj
相关产品推荐
相关产品推荐

