当前位置: 首页 > 知识库问答 >
问题:

为什么''''.IsNumeric()'false?

胡元忠
2023-03-14
⅐   ⅑   ⅒   ⅓   ⅔   ⅕   ⅖   ⅗   ⅘   ⅙   ⅚   ⅛   ⅜   ⅝   ⅞   ⅟
Ⅰ   Ⅱ   Ⅲ   Ⅳ   Ⅴ   Ⅵ   Ⅶ   Ⅷ   Ⅸ   Ⅹ   Ⅺ   Ⅻ   Ⅼ   Ⅽ   Ⅾ   Ⅿ
ⅰ   ⅱ   ⅲ   ⅳ   ⅴ   ⅵ   ⅶ   ⅷ   ⅸ   ⅹ   ⅺ   ⅻ   ⅼ   ⅽ   ⅾ   ⅿ
ↀ   ↁ   ↂ   Ↄ   ↄ   ↅ   ↆ   ↇ   ↈ   ↉   ↊   ↋
In [252]: print([k for k in "⅐⅑⅒⅓⅔⅕⅖⅗⅘⅙⅚⅛⅜⅝⅞⅟ⅠⅡⅢⅣⅤⅥⅦⅧⅨⅩⅪⅫⅬⅭⅮⅯⅰⅱⅲⅳⅴⅵⅶⅷⅸⅹⅺⅻⅼⅽⅾⅿↀↁↂↃↄↅↆↇↈ↉↊↋" if not k.isnumeric()])
['Ↄ', 'ↄ', '↊', '↋']
  • 罗马数字颠倒一百
  • 拉丁文小写字母反转C
  • 变成数字二
  • 变成数字三

为什么Python认为这些不是数字?

共有1个答案

黄丰
2023-03-14

对于“具有Unicode numeric value属性的所有字符”,str.isNumeric被记录为true。

该属性的规范引用是Unicode字符数据库。我们需要的信息可以从http://www.unicode.org/public/9.0.0/ucd/unicodedata.txt中找到,这是编写本报告时(2016年底)的最新版本(警告:1.5MB文本文件)。阅读起来有点棘手(文档在UAX#44)。我将为一个数字优先的字符显示它的条目,U+3023杭州数字三()

3023;HANGZHOU NUMERAL THREE;Nl;0;L;;;;3;N;;;;;

第八个分号分隔的字段是“Numeric Value”属性;在本例中,它的值为3,与字符的名称一致。Python的str.isNumeric为true当且仅当此字段为非空。可以使用unicodedata.numeric直接查询它。

第三个分号分隔的字段是两个字符的代码,给出“一般类别”;在这种情况下,“NL”。大多数(但不是全部)具有数字值的字符属于“数字”类别之一(类别代码的第一个字母是N)。例外的都是汉子,根据上下文,可以表示数字,也可以不表示数字;参见UAX#38。

现在,你要问的角色:

2183;ROMAN NUMERAL REVERSED ONE HUNDRED;Lu;0;L ;;;;;N;;;    ;2184;
2184;LATIN SMALL LETTER REVERSED C     ;Ll;0;L ;;;;;N;;;2183;    ;2183
218A;TURNED DIGIT TWO                  ;So;0;ON;;;;;N;;;    ;    ;
218B;TURNED DIGIT THREE                ;So;0;ON;;;;;N;;;    ;    ;

这些字符没有指定数值,因此Python的行为是正确的。

 类似资料:
  • 描述 (Description) 方法isnumeric()检查字符串是否仅包含数字字符。 此方法仅存在于unicode对象上。 Note - 要将字符串定义为Unicode,只需将“u”前缀添加到赋值的开始引号即可。 以下是示例。 语法 (Syntax) 以下是isnumeric()方法的语法 - str.isnumeric() 参数 (Parameters) NA 返回值 (Return V

  • 问题内容: 当我运行这些方法时 对于s的每个值(当然是字符串),我总是得到输出,或者全部为True,或者全部为False。两者之间有什么区别?您能否提供一个给出两个对错一个(反之亦然)的示例? 问题答案: 主要是关于unicode分类。以下是一些显示差异的示例: 具体行为在此处的官方文档中。 查找所有脚本:

  • Python3 字符串 描述 isnumeric() 方法检测字符串是否只由数字组成。这种方法是只针对unicode对象。 注:定义一个字符串为Unicode,只需要在字符串前添加 'u' 前缀即可,具体可以查看本章节例子。 语法 isnumeric()方法语法: str.isnumeric() 参数 无。 返回值 如果字符串中只包含数字字符,则返回 True,否则返回 False 实例 以下

  • 问题内容: SQL正在检测以下字符串: ‘07213E71’ 我相信这是因为“ E”被归类为数学符号。 但是,我需要确保仅将整数形式的值返回为True。 我怎样才能做到这一点? 问题答案: 是具有71个零的浮点数7213 您可以使用它来测试整数。有点神秘,但可以工作。 另一个测试是双负数,它只允许数字0到9。 ISNUMERIC有其他问题,这些都返回1: ,,`+``-```

  • 问题内容: 我需要检查SQL Server 2012中是否为数字的列。 这是我的案例代码。 但是,当达到该值时,它将返回,这表示SQL Server将此字符串视为数字。 这是为什么? 如何避免这类问题? 问题答案: 不幸的是,SQL Server中的功能有许多怪癖。它并不完全是越野车,但很少能像人们初次使用它时所期望的那样。 但是,由于您使用的是SQL Server 2012,因此可以使用该功能执

  • 问题内容: 在Java 8中,我们有类,它奇怪地有一个方法 因此,您可能希望它实现接口,而该接口正是需要此方法,但事实并非如此。 当我想使用foreach循环遍历Stream时,我必须做类似的事情 我在这里想念什么吗? 问题答案: 人们已经在邮件列表 asked 上问过同样的问题。主要原因是Iterable也具有可重复的语义,而Stream没有。 我认为主要原因是Iterable暗示可重用性,而S