正则表达式中的“ \ d”表示数字吗?


147

我发现123\d比赛13,但不会2。我想知道\d匹配的数字是否满足哪种要求?我说的是Python样式的正则表达式。

Gedit中的正则表达式插件使用Python样式正则表达式。我创建了一个文本文件,其内容为

123

正则表达式只13匹配\d2不是。

通常,对于一系列数字,中间没有其他字符,只有奇数位是匹配的,偶数位不是。对于例如12345,比赛是135


4
\d将匹配12并且3。如果没有,则您的表情中必须还有其他内容。您能显示出完整的表情吗?
Alex Aza

4
\d是的简写[0-9],所以应该匹配2。请发布完整的测试案例(可以运行的脚本,演示您的问题),也许我们可以找出问题所在。
zwol 2011年

@delnan:“我发现在123中,\ d匹配1和3,但不匹配2”对我来说听起来很具体。
琥珀

@琥珀:该死的我,我错过了!

5
好的,我不会将其发布为答案,因为我不知道,但是我认为发生的是gedit拒绝在上一场比赛结束后立即开始新的比赛-无论它是什么,它都会跳过一个字符,然后再尝试匹配。请尝试匹配1111122222
zwol 2011年

Answers:


459

[0-9] 并不总是等同\d。在python3中,[0-9]仅匹配0123456789字符,而\d匹配[0-9]其他字符,例如东部阿拉伯数字٠١٢٣٤٥٦٧٨٩


3
在REPL中尝试此操作:import re, re.match(r'\d', '٠١٢٣٤٥٦٧٨٩')显示没有匹配项
尼克

1
@nickf在python3上尝试一下。
2013年

2
对于波斯语和阿拉伯语,在Java和JavaScript引擎中,请使用\ p {Nd}
Alireza Fattahi,2013年

6
+1,但是mmmm ... OP的标记是Python并且\d仅在Python3中与任何Unicode数字匹配。在Python 2.7中,它仍然是旧的[0-9]ASCII-值得在答案中加以澄清。:)
zx81 2014年

1
@FarazAhmad,可能不是,您必须分别指定所有字符
Kirill Polishchuk 17/12/28


8

在Python样式的正则表达式中,\d匹配任何单个数字。如果您看到的东西似乎无法做到这一点,请提供您正在使用的完整正则表达式,而不是仅仅描述一个特定的符号。

>>> import re
>>> re.match(r'\d', '3')
<_sre.SRE_Match object at 0x02155B80>
>>> re.match(r'\d', '2')
<_sre.SRE_Match object at 0x02155BB8>
>>> re.match(r'\d', '1')
<_sre.SRE_Match object at 0x02155B80>

谢谢!我的正则表达式解析器是gedit中的正则表达式插件。整个内容是123


5

这只是一个猜测,但我认为您的编辑器实际上会匹配每个数字,1 2 3但是会突出显示奇数匹配,以区别于整个123字符串都匹配的情况。

大多数正则表达式控制台使用不同的颜色突出显示连续的匹配项,但是由于插件设置,终端限制或其他原因,在您的情况下,可能仅突出显示每个其他组。


1

有关.NET / C#的信息:

小数位字符:\ d \ d匹配任何小数位。它等效于\ p {Nd}正则表达式模式,其中包括标准的十进制数字0-9和许多其他字符集的十进制数字。

如果指定了ECMAScript兼容行为,则\ d等效于[0-9]。有关ECMAScript正则表达式的信息,请参阅正则表达式选项中的“ ECMAScript匹配行为”部分。

信息:https : //docs.microsoft.com/zh-cn/dotnet/standard/base-types/character-classes-in-regular-expressions#decimal-digit-character-d

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.