You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

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

火山引擎 最新活动