python替换html中所有字体大小

发布于:2025-03-22 ⋅ 阅读:(233) ⋅ 点赞:(0)

要处理不同单位的字体大小(例如 pt, em, % 等),我们可以扩展正则表达式以匹配这些单位,并在替换函数中相应地处理它们。下面是一个修改后的版本,可以处理多种字体大小单位:

import re

def update_font_sizes_with_regex(html_content, min_font_size=45):
    # 正则表达式匹配 font-size 样式,支持 px, pt, em, % 等单位
    pattern = re.compile(r'font-size:\s*(\d+(\.\d+)?)\s*(px|pt|em|%|rem|vw|vh|in|cm|mm|ex|ch|pc|q|in|deg|grad|rad|turn|s|ms|Hz|kHz|dpi|dpcm|dppx|?)')

    # 转换函数,将非 px 单位转换为 px(这里简化处理,仅作示例)
    # 注意:这个转换是非常简化的,实际转换需要更复杂的逻辑
    def convert_to_px(size, unit):
        # 这里为了示例,仅简单处理 px 和 em(假设 1em = 16px)
        if unit == 'px':
            return size
        elif unit == 'em':
            # 假设基础字体大小为 16px(这通常是一个浏览器的默认值)
            return size * 16
        # 对于其他单位,这里简单地返回原始值(不进行转换)
        # 实际使用时,应该添加适当的转换逻辑
        return size

    # 替换函数
    def replace_font_size(match):
        size_str = match.group(1)
        unit = match.group(3)
        size = float(size_str)  # 提取当前字体大小

        # 转换为 px 单位的等效值(这里仅作示例,实际可能需要更复杂的逻辑)
        px_size = convert_to_px(size, unit)

        # 如果转换后的 px 大小小于 min_font_size,则使用 min_font_size px
        if px_size < min_font_size:
            return f'font-size: {min_font_size}px'
        
        # 如果单位是 px,直接返回原值(因为已经是 px 并且可能经过了四舍五入)
        # 对于其他单位,我们返回转换后的 px 值(但这里为了保持原样,还是返回原单位)
        # 注意:这里的逻辑可以根据实际需求调整,比如是否总是返回 px 单位
        return f'font-size: {size_str}{unit}' if unit != 'px' else f'font-size: {round(px_size)}px'

    # 使用正则表达式替换所有匹配的 font-size
    updated_html = pattern.sub(replace_font_size, html_content)

    return updated_html

# 示例使用
html_content = '<div style="font-size: 12px;">Small Text</div><div style="font-size: 1em;">Em Text</div>'
updated_html = update_font_sizes_with_regex(html_content, min_font_size=45)
print(updated_html)

注意

  1. convert_to_px 函数中的单位转换是非常简化的,仅用于示例。在实际应用中,单位转换可能更加复杂,并且需要更多的上下文信息(如基础字体大小、视口尺寸等)。
  2. 示例中的 replace_font_size 函数在转换后仍然保留了原始单位(除了 px),这仅是为了演示。在实际应用中,你可能希望统一返回 px 单位,或者根据具体需求进行其他处理。
  3. 正则表达式中的单位列表可能不完整,你可以根据需要添加更多的 CSS 单位。