正则表达式转换公式变量为命名格式的问题排查与修正
问题与修正方案
需求与问题
需要将Formula_bit中的公式内容转换为小写且单词以下划线分隔的命名格式,处理规则如下:
- 按运算符(+、-、*、/)或
x(乘法)拆分内容 - 转为小写,空格替换为下划线
- 移除括号
- 去除首尾下划线
现有代码输出不符合预期:
当前输出:
['σ_dividends', 'dividend_payout_ratio_,_eps']
预期输出:
['σ_dividends', 'dividend_payout_ratio', 'eps']
错误原因
原代码逻辑混乱:先用re.sub把运算符替换成逗号,再用re.split拆分,但只取了拆分结果的第一个元素[0],导致第二个公式项只处理了前半部分,还把替换的逗号混进了结果里,同时没正确拆分出所有参数。
修正后的代码
import re Formula_bit = ['Σ (Dividends)', 'Dividend Payout Ratio * eps'] params = [] for item in Formula_bit: # 匹配所有运算符(+、-、*、/、x)及前后空格,拆分参数 split_parts = re.split(r'\s*[+\-*/x]\s*', item) for part in split_parts: # 依次执行格式转换操作 processed_part = part.lower()\ .replace(" ", "_")\ .replace("(", "")\ .replace(")", "")\ .strip("_") # 过滤空值,避免无效项 if processed_part: params.append(processed_part) print(params)
代码说明
- 拆分参数:用正则
\s*[+\-*/x]\s*匹配所有运算符(包含前后可能的空格),将每个公式拆分为独立的参数部分 - 格式转换:对每个参数部分依次执行转小写、空格替换为下划线、移除括号、去除首尾下划线的操作
- 过滤空值:避免拆分后产生的空字符串被加入结果列表
运行后输出:
['σ_dividends', 'dividend_payout_ratio', 'eps']
内容的提问来源于stack exchange,提问作者Bosser445
相关产品推荐
相关产品推荐

