Python正则表达式处理 "?"

标签 python regex

我知道这是一个非常简单的问题。我碰巧看到了一个正则表达式示例。

import re
pattern = r'^M?M?M?$'

s = "MDM"

re.search(pattern, s)

我可以知道为什么它与字符串s不匹配吗? AFAIK,? 是指定出现 0 次或 1 次。不过它与 MMM 匹配。

但是,当模式为 r'M?M?M?$'r'^M?M?M?' 时,相同的字符串会匹配。我不明白这里有什么不同。有人可以解释一下吗?

最佳答案

r'^M?M?M?$'r'^M{0,3}$' 相同。因此,您的模式接受 ''、'M'、'MM'、'MMM' 字符串。

r'M?M?M?$'r'M{0,3}$ 相同,实际上接受所有字符串,因为字符串末尾始终是空部分:

In [21]: pattern = r'M?M?M?$'

In [22]: re.search(pattern, 'A string without capital m at all')
Out[22]: <_sre.SRE_Match object; span=(33, 33), match=''>

关于Python正则表达式处理 "?",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35574690/

相关文章:

javascript - 满足条件时正则表达式匹配逗号

java - 千个分隔数字的正则表达式

python - 从与程序位于同一文件夹中的文件夹加载图像

python - 如何使用参数调用管道

python - Kivy - 矩形延迟绑定(bind)到图像

java - 用于货币格式化的正则表达式 - java

java - 非法 unicode 转义序列值 :\n (0x6E)

python - 理解 FeatureUnion (pandas) 工作的困惑

python - 在python中使用vid.stab将ffmpeg的输出文件捕获到一个变量中

C# 和 Regex - 无法识别的分组构造