如何使用Python regex匹配符合指定规则的上标文本
匹配上标文本的Python正则实现方案
首先需要明确你处理的上标文本的存储形式,不同场景的实现逻辑完全不同:
场景1:带格式标记的富文本(HTML/Markdown)
这是最常见的场景,上标有明确的包裹标记,正则可以通过匹配标记锁定上标范围,再筛选内容规则:
- HTML 中上标用
<sup>标签包裹,匹配符合规则的上标内容的正则为:r'<sup>([a-zA-Z0-9,\[\]]+)</sup>' - Markdown (通用方言)中上标用
^包裹,匹配正则为:r'\^([a-zA-Z0-9,\[\]]+)\^'
Python 实现示例(HTML场景):
import re content = "普通文本<sup>abc123[</sup>,不符合规则的上标<sup>!@#$</sup>,普通的abc123[不会命中" pattern = re.compile(r'<sup>([a-zA-Z0-9,\[\]]+)</sup>') result = pattern.findall(content) print(result) # 输出 ['abc123[']
注意:正则中方括号是特殊字符,匹配字面量方括号时必须加转义符\,写为\[\]
场景2:纯文本中的Unicode原生上标字符
如果你的文本是无格式标记的纯文本,上标是用¹、²、ⁿ这类Unicode上标字符表示的,需要注意:Unicode本身没有覆盖全量a-z字母的上标编码,仅支持部分数字和少量字母。
匹配现有Unicode上标且符合你要求的字符规则的正则示例:
import re content = "普通文本abc123,上标文本ⁿ¹²³[,不符合的上标⁺⁻" # 正则包含所有已有的Unicode上标数字、字母,以及你要求的逗号、方括号 pattern = re.compile(r'[\u2070\u00B9\u00B2\u00B3\u2074-\u2079\u2071\u207F\u1D43-\u1D61\u1D7C-\u1D9A,\[\]]+') result = pattern.findall(content) print(result) # 输出 ['ⁿ¹²³[']
特殊场景说明
如果你处理的是Word、PDF等文档里的格式上标,正则无法直接识别文档的格式属性,需要先借助python-docx、pdfplumber等工具读取到上标的格式标记后,再做内容规则匹配。
内容的提问来源于stack exchange,提问作者Tiago Bachiega de Almeida
相关产品推荐
相关产品推荐

