如何用Python正则表达式清理带连字符的价格范围字符串?
问题场景
需要清理价格范围字符串 'GBP 10,000,000 – GBP 15,000,000',要求用Python正则表达式移除货币标识GBP,将连字符替换为逗号,最终输出格式为 (10000000,15000000)。
原尝试方案 re.sub('[GBP,/s-]','', text) 存在问题,输出为 ' 10000000 – 15000000',未完成空格清理和连字符替换。
解决方案
方案1:分步正则处理+格式组装
import re text = 'GBP 10,000,000 – GBP 15,000,000' # 清理GBP、逗号,将长破折号/短横替换为空白,再去除首尾空格 cleaned_text = re.sub(r'GBP|,|–|-', '', text).strip() # 分割出两个数字字符串 num_strs = cleaned_text.split() # 格式化为目标元组格式 result = f"({int(num_strs[0])},{int(num_strs[1])})" print(result) # 输出 (10000000,15000000)
方案2:直接提取数字核心内容
import re text = 'GBP 10,000,000 – GBP 15,000,000' # 匹配带逗号的数字格式,再移除逗号得到纯数字字符串 num_list = [re.sub(',', '', match) for match in re.findall(r'\d{1,3}(?:,\d{3})+', text)] # 拼接成目标格式 result = f"({num_list[0]},{num_list[1]})" print(result)
原方案问题分析
- 正则中的
/s是错误写法,正确空白字符标识应为\s - 原字符串中的连字符是长破折号
–,不是普通短横-,原正则未匹配到该字符 - 仅移除指定字符未处理剩余空格,导致输出残留空白
内容的提问来源于stack exchange,提问作者user2821
相关产品推荐
相关产品推荐

