如何优化提取占星宫位数据的正则表达式?
优化后的正则表达式方案
可以将原正则表达式的宫位分组大幅简化,同时提升匹配精度和执行效率,优化后的正则如下:
house_pattern = r'^(\d{1,2}|[A-Z](?:[A-Z]|[a-z]+\.))\s+([a-z])\s+(\d+°\s*\d+\'\d+")'
关键优化点
1. 宫位编号/关键点分组重构
原分组([A-Z]{2}|[A-Z][a-z]+\.|[0-9]|[0-9]{2})被简化为(\d{1,2}|[A-Z](?:[A-Z]|[a-z]+\.)),具体优化:
- 用
\d{1,2}替代[0-9]|[0-9]{2},简洁匹配1-12的1位或2位数字 - 用
[A-Z](?:[A-Z]|[a-z]+\.)合并两种文本类型:[A-Z][A-Z]:匹配IC、MC这类双大写字母的占星关键点缩写[A-Z][a-z]+\.:匹配Asc.、Desc.这类首字母大写、后续小写字母加句点的缩写
- 使用非捕获组
(?:...)避免创建不必要的捕获组,提升正则执行效率
2. 度数分组精度提升
原分组(\d+°+.\d+\'+.\d+")优化为(\d+°\s*\d+\'\d+"):
- 将
°+改为°,因为每个度数只会有一个度符号,避免匹配无效的多°场景 - 将模糊的
.改为\s*,精确匹配度与分之间可能存在的空格(比如示例中的23° 5'14") - 移除多余的
+限定符,让正则逻辑更清晰,减少意外匹配
3. 行首锚定
添加^锚定行首,确保只匹配每一行开头的宫位数据,避免匹配行内其他无关内容,进一步提升准确性
验证结果
该正则可以完全匹配你的示例数据集,输出结果与原正则一致,同时代码更简洁、可读性更强。
内容的提问来源于stack exchange,提问作者Jordan
相关产品推荐
相关产品推荐

