2012-09-12 45 views
7

我遇到了一個看似簡單的Python正則表達式的問題。什麼是sre_constants.error:什麼都不重複

# e.g. If I wanted to find "mark has wonderful kittens, but they're mischievous.." 
p = re.compile("*kittens*") 

這將失敗與錯誤:

Traceback (most recent call last): 
    File "<stdin>", line 1, in <module> 
    File "/usr/lib64/python2.7/re.py", line 190, in compile 
    return _compile(pattern, flags) 
    File "/usr/lib64/python2.7/re.py", line 242, in _compile 
    raise error, v # invalid expression 
sre_constants.error: nothing to repeat 

我可能失去了一些東西很簡單,正則表達式肯定不是我的強項!

回答

18

你正混淆正則表達式與globs

你的意思是:

p = re.compile(".*kittens.*") 

注意,因爲它在一個全局正則表達式做了裸星號並不意味着在相同的RE。

+0

感謝。這似乎是完美的。順便說一句 - 有沒有學習RE的指南,你(或其他人)會推薦? Python文檔非常棒,但是看起來有點陡峭。 –

+1

@RickyHewitt試試http://www.regular-expressions.info/tutorial.html。 – unwind

2

*是一個元字符,意思是「0或更多的前面的標記」,並且沒有什麼可以重複的第一個*

也許你正在尋找的字邊界:

p = re.compile(r"\bkittens\b") 

\b確保只有整個單詞匹配(所以這個表達式會失敗的,啊哈,"kittenshit"

+1

這不會被're.match'捕獲,但會被're.findall'或're.search'(+1)捕獲。 – mgilson

+2

如果你正在打小貓,你和我會有話,先生,75k +業力或不。 – DSM