正则表达式(python)有问题我不知道如何*?有效,我将在下面发布代码

问题描述 投票:0回答:1

示例 1

import re
data = '[email protected] hd'
stufff = re.findall('@([0-9]*?)', data)
print(stufff)

它打印

['']
但是为什么但是
@
符号后面有数字,我知道它遵循非贪婪 它应该打印
['8']
但为什么不打印?我需要有人向我解释这段代码。

例子2

import re
data = '[email protected] hd'
stufff = re.findall('@([0-9]*)', data)
print(stufff)

我知道它是贪婪的所以它在

@
之后取数字并在看到i时停止,所以输出是
['89']
。请解释一下example-1,谢谢!

python regex find slice python-re
1个回答
0
投票

对我来说,我将这些正则表达式符号用于以下目的:

?
零次或一次匹配前面的元素
+
匹配前面的元素一次或多次
*
匹配前面的元素零次或多次

所以在你的情况下,如果你只想获得'8',你应该单独使用

?
,而不是组合
*?
。所以你的代码应该是:

import re 
data = '[email protected] hd' 
stufff = re.findall('@([0-9]?)', data) 
print(stufff)

输出:

['8']
© www.soinside.com 2019 - 2024. All rights reserved.