请教一个 re 正则的问题

2021-05-09 12:37:32 +08:00
 plko345

匹配 数字三连....

import re

s = 'abc 456 def'

re.search('\d\d\d', s)       # 成功
re.search('\d{3}', s)        # None
re.search('[0-9]{3}', s)    # 成功

为什么 \d{3} 不行, 我在在线正则测试的工具网站上试过 \d{3} 并没有错, google 也没找到有说明的, 可能是关键字不对

1956 次点击
所在节点    Python
9 条回复
oldshensheep
2021-05-09 12:44:23 +08:00
Trim21
2021-05-09 12:47:21 +08:00
试了试第二个能正确匹配
cherbim
2021-05-09 13:06:38 +08:00
我测试第二个成功啊
ClericPy
2021-05-09 13:52:37 +08:00
python 3.7 3.8 3.9 2.7 都能正确匹配

要不你试试 r'\d{3}'
iptables
2021-05-09 13:56:46 +08:00
我的测试结果

$ python3.9
Python 3.9.5 (default, May 3 2021, 19:12:05)
[Clang 12.0.5 (clang-1205.0.22.9)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>>
>>> import re
>>>
>>> s = 'abc 456 def'
>>>
>>> re.search('\d\d\d', s)
<re.Match object; span=(4, 7), match='456'>
>>> re.search('\d{3}', s)
<re.Match object; span=(4, 7), match='456'>
>>> re.search('[0-9]{3}', s)
<re.Match object; span=(4, 7), match='456'>
>>>
>>> re.search(r'\d\d\d', s)
<re.Match object; span=(4, 7), match='456'>
>>> re.search(r'\d{3}', s)
<re.Match object; span=(4, 7), match='456'>
>>> re.search(r'[0-9]{3}', s)
<re.Match object; span=(4, 7), match='456'>
>>>
plko345
2021-05-09 14:00:57 +08:00
@Trim21
@cherbim
@ClericPy
@iptables

谢谢各位, 尴尬了, 我再找找是不是我哪里搞错了
crystom
2021-05-09 14:25:21 +08:00
python3 的\d 包括各种 unicode 数字,不光是 0-9
imn1
2021-05-09 15:05:31 +08:00
@crystom #7
哇靠,还真不知这个,测试了一下,全角数字也能匹配,不会罗马数字也行吧?
yunyuyuan
2021-05-10 09:24:46 +08:00
@crystom 涨见识了

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/775794

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX