正则表达式中的“ \ d”和“ [0-9]”是否可以互换?

时间:2019-05-26 06:18:00

标签: python

我是Python正则表达式的新手。我正在尝试从字符串中提取整数,这是代码。

print(re.findall('\d{3}', '$2700'))
print(re.findall('[0-9]{3}', '$2700'))

输出是

['270']
['270']

似乎“ \ d”和“ [0-9]”的工作方式相同,请使用docs.python.org上的链接对此进行解释。

1 个答案:

答案 0 :(得分:2)

正则表达式Syntax

对于Unicode(str)模式:

  

匹配任何Unicode十进制数字(即   是Unicode字符类别[Nd]中的任何字符)。这包括   [0-9],以及许多其他数字字符。如果使用ASCII标志   仅[0-9]被匹配。

对于8位(字节)模式:

  

匹配任何小数   数字;相当于[0-9]。

因此,它们等效于ASCII,但是在使用Unicode字符时\d会匹配更多字符。此问题的输入:\d only matchs 0-9 digits?

>>> s="۱۲۳۴۵۶۷۸۹"
>>> s.isdigit()
True
>>> re.match("\d+",s)
<_sre.SRE_Match object; span=(0, 9), match='۱۲۳۴۵۶۷۸۹'>
>>> re.match("[0-9]",s)
(no match)