2012-02-04 74 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匹配。