抱歉,我只能使用英语回答您的问题。
s = 'abcdefg*'
我该怎么样匹配只由小写字母组成并且可选以以星号结尾的字符串呢?我认为以下代码可以运行,但实际上不行:
re.match(r"^[a-z]\*+$", s)
它返回None
而不是匹配对象。我如何匹配只由小写字母组成,并可选以星号结尾的任何字符串?
以下代码可以实现:
re.match(r"^[a-z]+[*]?$", s)
^
匹配字符串的开头。[a-z]+
匹配一个或多个小写字母。[*]?
匹配零或一个星号。$
匹配字符串的结尾。你原来的正则表达式匹配恰好一个小写字符后跟一个或多个星号。
\*?
表示 0 或 1 个星号:
re.match(r"^[a-z]+\*?$", s)
re.match(r"^[a-z]+\*?$", s)
[a-z]+
匹配小写字母序列,而 \*?
则匹配一个可选的星号字符 *
。
尝试
re.match(r"^[a-z]*\*?$", s)
这意味着“一个由零个或多个小写字符组成的字符串(因此第一个星号),后跟零个或一个星号(转义星号后面的问号)。”
你的正则表达式意味着“恰好一个小写字符后跟一个或多个星号”。
你忘记在[a-z]匹配后面加上+,以表示你也想要1个或更多个(现在只匹配一个)。
re.match(r"^[a-z]+\*+$", s)