Python如何合并两个正则模式实现全场景百分比数值提取?
解决方案
合并后正则及代码
直接使用如下正则即可覆盖所有测试场景,适配pandas的str.extract用法:
# 通用版本,保留原小数位数 merged_pattern = r'(?:^|[^\d])(0*(?:100|[1-9]?\d)?(?:\.\d+)?)%*[^%]*$' # 若需要强制最多保留2位小数,替换为以下正则 # merged_pattern = r'(?:^|[^\d])(0*(?:100|[1-9]?\d)?(?:\.\d{1,2})?)%*[^%]*$' df['var'] = df['var'].astype(str).str.extract(merged_pattern)[0]
正则逻辑说明
- 定位规则:自动忽略数值前后的特殊字符(*、@、#等)、序号、空格、说明文本、任意数量的连续%符号
- 数值范围:仅匹配0-100区间的数值,超出范围的数值(如19348952)返回空值
- 格式适配:支持整数、小数、无整数部分的小数(如
.85%)三类写法,前导0保留规则符合预期:- 全0字符串保留所有0(
000→000) - 非全0数值自动去除无效前导0(
021→21)
- 全0字符串保留所有0(
内容的提问来源于stack exchange,提问作者non_linear
相关产品推荐
相关产品推荐

