如何替换方括号后首个小数点前的内容且保留括号和小数点?
方括号内指定位置数字替换方案
原代码错误原因
你使用的正则 *\[.*?\. * 存在两处问题:
- 匹配范围包含了左方括号
[本身,替换时直接将[和目标数字一同替换为80,导致方括号丢失 - 匹配内容包含了第一个小数点,替换后小数点消失,原
70.00部分就变成了错误的8000
正确实现方案
推荐使用零宽断言实现,不需要额外处理保留字符,逻辑更直观:
正则规则
使用正则(?<=\[)\d+(?=\.),规则解释:
(?<=\[):正向零宽后行断言,匹配位置的前面必须是左方括号[,不会将[纳入匹配内容\d+:匹配1个及以上数字,即你需要替换的70部分(?=\.):正向零宽先行断言,匹配位置的后面必须是小数点.,不会将.纳入匹配内容
不同语言示例
PHP示例
// 无空格版本,输入为filter[xxx]格式 echo preg_replace('/(?<=\[)\d+(?=\.)/', '80', 'filter[70.00-100.00]'); // 兼容方括号前带空格版本,输入为filter [xxx]格式 echo preg_replace('/(?<=\[ *)\d+(?=\.)/', '80', 'filter [70.00-140.00]');
Python示例
import re # 无空格版本 print(re.sub(r'(?<=\[)\d+(?=\.)', '80', 'filter[70.00-100.00]')) # 兼容方括号前带空格版本 print(re.sub(r'(?<=\[ *)\d+(?=\.)', '80', 'filter [70.00-140.00]'))
运行效果
输入filter[70.00-100.00] 输出结果为filter[80.00-100.00],完全符合需求。
内容的提问来源于stack exchange,提问作者StuMet
相关产品推荐
相关产品推荐

