2017-03-22 202 views
1

我一直試圖教自己的正則表達式,因爲我迄今爲止主要以某種方式避免它。正則表達式空格

但是我有一個益智遊戲。

這是代碼。

import re 

listostuff = [ "crustybread", "rusty nail", "grust0", "superrust"] 

for item in listostuff: 
    result = True if re.match(r'[a-z]+rust[a-z0-9\s \t\s+]+', item) else False 
    print item, result 

和這裏的結果:

crustybread True 
rusty nail False 
grust0 True 
superrust False 

我希望superrust不匹配,但我希望「生鏽的釘子」,以配合這一點。

我已經把所有的空格字符,我可以在重新設定找到,但它並沒有把它撿起來。我也試過只有單一的組合。他們似乎不匹配生鏽的釘子。

有人能告訴我我做錯了什麼嗎? (順便說一句我已經搜索這個網站和空白字符似乎是那些我這裏。

所以我的目標是讓所有的比賽除了superrust真。

+2

'[A-Z] +'匹配至少1個字母,替換'*' –

+0

三江源'+'。我是一個白癡。把它作爲你的答案,我會把我的戴帽和接受它。 –

+0

're.match(r'[a-z] * rust [a-z0-9 \ s] +',item)'是一種享受。謝謝 –

回答

1

你需要確保的模式允許匹配或多個字母剛開始時,用[a-z]*替換[a-z]+

re.match(r'[a-z]*rust[a-z0-9\s]+', item) 
       ^

注意re.match僅錨定匹配字符串的開始,在模式的末尾添加$如果你想整個輸入字符串匹配你的格局。

regex demo

0

的問題是,\s+不會做什麼你想要的[]內。

你需要像rust[a-z0-9]+\s+[a-z0-9]+這將使需要的,而不是可選的空間。