2012-04-10 83 views
4

我正在使用python試圖編寫一些簡單的代碼,通過正則表達式查找字符串並查找內容。在此字符串中:一個非常簡單的正則表達式的問題

and the next nothing is 44827 

我希望我的正則表達式只返回數字。

我已經建立了我的Python程序是這樣的:

buf = "and the next nothing is 44827" 
number = re.search("[0-9]*", buf) 
print buf 
print number.group() 

什麼number.group()返回的是一個空字符串。然而,當正則表達式是:

number = re.search("[0-9]+", buf) 

正確提取完整數字(44827)。我在這裏錯過了什麼?

回答

4

你的第一個正則表達式匹配字母「a」之前的空字符串,所以它停在那裏。你的第二個不會,所以它一直在努力。

8

問題是[0-9]*匹配零個或多個數字,所以它很樂意匹配零長度的字符串。

同時,[0-9]+匹配一個或多個數字,所以它需要看到至少一個數字才能被捕獲。


您可能想要使用findall並處理您每行有多個數字的情況。

4

這是因爲第一次嘗試匹配一個空字符串 - 你要求它爲「0或更多數字」 - 所以第一個匹配在字符串開頭是空的。當你詢問「一個或多個數字」時,第一場比賽從第一場比賽開始,然後從那裏繼續直到數字結尾。

3

看看你自己。

提示:

  • *匹配0或更多的次
  • +比賽1或更多的噸imes

顯然,第一個案件比第二個案件有更高的優先權。正則表達式引擎完全沒有問題,不匹配任何東西。 :-)