2012-02-04 144 views
6

考虑以下字符串:Python的正则表达式匹配的文字星号

s = 'abcdefg*' 

我怎样才能与之匹敌或仅由小写字母和可选有星号结尾的任何其他字符串?我想下面的工作,但它并不:

re.match(r"^[a-z]\*+$", s) 

它给None和不匹配的对象。

回答

13

我怎样才能匹配它或任何其他字符串只能由小写字母和可选结尾星号?

下面将做到这一点:

re.match(r"^[a-z]+[*]?$", s) 
  1. ^字符串的开头匹配。
  2. [a-z]+匹配一个或多个小写字母。
  3. [*]?匹配零或一个星号。
  4. $匹配字符串的末尾。

您的原始正则表达式恰好匹配一个小写字符后跟一个或多个星号。

4

\*?指0或1星号:

re.match(r"^[a-z]+\*?$", s) 
1

尝试

re.match(r"^[a-z]*\*?$", s) 

这意味着“由......组成零个或多个小写字符(因此第一个星号),一个字符串后面的零或一个星号(星号后面的问号)

你的正则表达式意思是“正好一个小写字符,后跟一个或多个星号”

0

您忘记了[a-z]匹配后的+,表示您还想要其中的一个或多个(现在它只匹配一个)。

re.match(r"^[a-z]+\*+$", s) 
2
re.match(r"^[a-z]+\*?$", s) 

[a-z]+的小写字母的序列相匹配,以及\*?可选字面* chatacter匹配。