Python中如何移除字符串中的数字上标?
嘿,我知道你为啥之前的正则没效果啦!你写的正则是用来匹配用^符号表示的上标格式(比如x^2这种),但你实际遇到的是Unicode原生的上标数字字符(比如你说的¹是U+2071,还有²是U+00B2、³是U+00B3这类),那肯定匹配不到呀!
我给你几个实用的解决方案,按需选就行:
1. 精准移除所有数字上标
Unicode里的数字上标有固定的编码范围,直接用正则匹配这些字符然后替换为空就好:
import re # 示例文本 text = "测试内容:1¹ 2² 3³ 4⁴ 5⁵ 0⁰" # 匹配所有Unicode数字上标并移除 cleaned_text = re.sub(r'[\u00B2\u00B3\u2070\u2071\u2074-\u2079]', '', text) print(cleaned_text) # 输出:测试内容:1 2 3 4 5 0
2. 移除所有上标类字符(包括符号)
如果你的文本里除了数字上标,还有像⁺、⁻这类上标符号也想一起清掉,可以用Unicode属性匹配,一步到位:
import re text = "带其他上标的文本:a⁺ b⁻ x⁽" # \p{Superscript} 匹配所有Unicode上标字符 cleaned_text = re.sub(r'\p{Superscript}', '', text) print(cleaned_text) # 输出:带其他上标的文本:a b x
(Python 3里re模块默认支持Unicode属性,旧版本可能需要加re.UNICODE标志)
额外小技巧:把上标转成普通数字
要是你不想删除上标,而是想把它转成普通数字(比如把¹变成1),可以用字符映射的方式:
superscript_to_normal = { '⁰': '0', '¹': '1', '²': '2', '³': '3', '⁴': '4', '⁵': '5', '⁶': '6', '⁷': '7', '⁸': '8', '⁹': '9' } text = "1¹ 2² 3³" cleaned_text = ''.join([superscript_to_normal.get(char, char) for char in text]) print(cleaned_text) # 输出:11 22 33
内容的提问来源于stack exchange,提问作者sara aaa




