regex 正则表达式:区分像²这样的指数和像2这样的规则数

f1tvaqid  于 2023-06-30  发布在  其他
关注(0)|答案(2)|浏览(92)

在Python中,我想区分像²这样的指数和像2这样的常规数字。我有弦
mystrings = ['2something', 'something3', 'm²', 'pcs.']
我想去掉除了指数以外的所有正常数。我目前的解决方案无法做到这一点:
[re.findall(r'[a-zA-Z]+\.?', mystring)[0] for mystring in mystrings]
它返回['something',' something','m','pcs.'],但我想得到['something',' something','m ','pcs.']作为结果。

i2loujxw

i2loujxw1#

您可以使用re.sub(r'\d+', '', mystring)删除“内联”数字,因为普通数字包含在 meta序列\d中,而指数等则不包含。

import re 
mystrings = ['2something', 'something3', 'm²', 'pcs.']
vv = [re.sub(r'\d+', '', mystring) for mystring in mystrings]
print(vv)
# ['something', 'something', 'm²', 'pcs.']
kdfy810k

kdfy810k2#

Python内置的re还不支持Unicode属性等,但第三方库regex支持:

import regex

pattern = regex.compile(r'[a-zA-Z\p{No}]+\.?')

...其中\p{No}匹配Other_Number类别中的任何字符。
试试on regex101.com
然而,这也将匹配下标数字和任何非0到9的数字。为了避免匹配不需要的字符,您可以以re兼容的方式指定所有上标数字:

[a-zA-Z\u00B2\u00B3\u00B9\u2070\u2074\u2075\u2076\u2077\u2078\u2079]+\.?
[a-zA-Z⁰¹²³⁴⁵⁶⁷⁸⁹]+\.?

试试on regex101.com

相关问题