如何使用正则表达式从ratingValue列中精准提取纯评分数值?
问题说明
需要从ratingValue列中提取纯评分数值,初始使用正则规则(\: \d+..)匹配时,返回结果包含多余的冒号与空格,例如返回结果为: 8.0,无法得到纯数字格式的评分。
解决方法
你之前的正则把冒号、空格和数字部分全部放进了捕获范围,所以匹配结果会带上不需要的前缀字符,可根据使用的工具支持情况选择以下改法:
- 捕获组提取法(兼容性最好,所有支持正则的工具都能用):如果只需要匹配带小数的评分,将正则修改为
: (\d+\.\d+);如果要同时兼容整数评分(如9)和小数评分(如8.0、9.5),可以用: (\d+(?:\.\d+)?),匹配后提取第1个捕获组的内容即可得到纯评分数值。比如对文本: 8.0匹配时,捕获组1返回的内容就是8.0。 - 正向断言匹配法(支持零宽断言的正则环境可用,可直接返回目标值不需要额外取捕获组):对应上述两种场景,正则分别为
(?<=: )\d+\.\d+(仅匹配小数评分)、(?<=: )\d+(?:\.\d+)?(兼容整数、小数评分),该类规则会自动跳过前缀的:字符,直接匹配到后面的数字评分。 - 避坑提醒:你之前写的
..是匹配任意两个任意字符,容错性极差,遇到整数评分、多位小数评分、评分后有其他字符的场景很容易匹配出错,明确用\.\d+匹配小数点和后续数字的写法更严谨。
内容的提问来源于stack exchange,提问作者yannick icard
相关产品推荐
相关产品推荐

