
本教程旨在提供一个优化且高效的正则表达式方案,用于从占星图文本中提取宫位数据,包括宫位标识、星座符号和精确度数。我们将分析常见正则表达式模式的不足,并引入一种更通用、更简洁的模式,以提升数据提取的效率和代码的可维护性,并提供详细的代码示例和最佳实践。
在占星学中,宫位数据通常以一种标准化的格式呈现,包含以下核心信息:
以下是一个典型的占星宫位数据示例:
Houses (Plac.) Declination Asc. j 3°23'49" 23°23'37" S 2 k 13°38'12" 16°43'48" S 3 l 25°39'11" 1°43'39" S IC a 28°32'56" 10°57'28" N 5 b 23° 5'14" 18°32'35" N
我们的目标是从每行中准确提取出 (宫位标识符, 星座符号, 精确度数) 这样的三元组。
在处理此类数据时,一个常见的初始尝试是为每个可能的宫位标识符枚举所有情况。例如,原始模式可能如下所示:
house_pattern_initial = r'([A-Z]{2}|[A-Z][a-z]+\.|[0-9]|[0-9]{2})\s+([a-z])\s+(\d+°+.\d+\'+.\d+\")'此模式的第一个捕获组 ([A-Z]{2}|[A-Z][a-z]+\.|[0-9]|[0-9]{2}) 试图通过多个 OR 条件来匹配不同的宫位标识符:
尽管这种模式能够正确匹配目标数据,但其缺点在于:
为了解决上述问题,我们可以采用更通用、更简洁的策略来捕获第一个字段。由于宫位标识符通常是行中第一个非空白字符序列,我们可以利用这一点进行优化。
优化后的正则表达式:
r'(\S+)\s+([a-z])\s+(\d+°\s*\d+\'\d+")'
让我们逐一解析这个优化后的模式:
(\S+):
\s+:
([a-z]):
\s+:
*`(\d+°\s\d+\'\d+")`**:
下面是一个使用优化后正则表达式在 Python 中提取占星宫位数据的完整示例:
import re
# 示例数据
astrology_data = """
Houses (Plac.) Declination
Asc. j 3°23'49" 23°23'37" S
2 k 13°38'12" 16°43'48" S
3 l 25°39'11" 1°43'39" S
IC a 28°32'56" 10°57'28" N
5 b 23° 5'14" 18°32'35" N
6 c 13°27'11" 22°24'45" N
Desc. d 3°23'49" 23°23'37" N
8 e 13°38'12" 16°43'48" N
9 f 25°39'11" 1°43'39" N
MC g 28°32'56" 10°57'28" S
11 h 23° 5'14" 18°32'35" S
12 i 13°27'11" 22°24'45" S
"""
# 优化后的正则表达式模式
optimized_house_pattern = r'(\S+)\s+([a-z])\s+(\d+°\s*\d+\'\d+")'
extracted_results = []
# 按行处理数据
for line in astrology_data.strip().split('\n'):
# 跳过标题行或空行
if not line or "Houses" in line:
continue
# 尝试匹配当前行
match = re.search(optimized_house_pattern, line)
if match:
# 如果匹配成功,提取捕获组并添加到结果列表
extracted_results.append(match.groups())
# 打印提取结果
print("提取到的占星宫位数据:")
for item in extracted_results:
print(item)
输出结果:
提取到的占星宫位数据:
('Asc.', 'j', '3°23\'49"')
('2', 'k', '13°38\'12"')
('3', 'l', '25°39\'11"')
('IC', 'a', '28°32\'56"')
('5', 'b', '23° 5\'14"')
('6', 'c', '13°27\'11"')
('Desc.', 'd', '3°23\'49"')
('8', 'e', '13°38\'12"')
('9', 'f', '25°39\'11"')
('MC', 'g', '28°32\'56"')
('11', 'h', '23° 5'14"')
('12', 'i', '13°27\'11"')通过将正则表达式的第一个捕获组从多个具体条件优化为通用的 (\S+) 模式,我们成功地简化了正则表达式,使其更具可读性、可维护性和效率,同时保持了准确的数据提取能力。这种通用化策略是编写高效和健壮正则表达式的关键原则之一。理解数据结构并选择最能代表其特征的通用模式,能够显著提升数据处理的质量和效率。
以上就是高效提取占星宫位数据的正则表达式教程的详细内容,更多请关注php中文网其它相关文章!
每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号