2012-12-31 112 views
-3

我試圖檢查最多3個數字的字符串在我使用的一排:蟒蛇正則表達式數字

regex = re.compile("\d{0,3}") 

但這並不比如字符串1234會工作被這個正則表達式接受,即使長度爲3的數字字符串也是如此。

+3

什麼不行?你的輸入是什麼,你得到了什麼輸出? –

+0

我試圖通過回答你的問題來幫助你,我已經刪除了我的答案和所有評論。原因是你的問題很不清楚,你發佈的內容有很多錯誤,並回答他們,併爲你的答案提供直接解決方案,我對你如何告訴我這是錯誤的感到震驚。你是對的,我回答你發佈的問題是錯誤的,而不是你沒有發佈的代碼問題。在未來,我建議你提供更多的信息,以減少那些試圖幫助你的人的挫敗感。 –

+0

@InbarRose如果問題如此不清楚,那麼你不應該回答,甚至更糟糕的是,你發表了對其他人的評論,說他們錯了(當他們確實是正確的時候),現在你對OP告訴你「很震驚」你不正確的答案不是他正在尋找的!?!? –

回答

1

如果你想在字符串中檢查最多3位數的字符串,你需要使用'\d{4,}',因爲你只對數字字符串感興趣長度爲3.

import re 

str='123abc1234def12' 
print re.findall('\d{4,}',str) 

>>> '[1234]' 

如果使用{0,3}

str='123456' 
print re.findall('\d{0,3}',str) 

>>> ['123', '456', ''] 

regex匹配最大長度3和空字符串的數字串,但這不能用來測試的正確性。在這裏你不能檢查所有的數字字符串是否在長度上,但你可以很容易地檢查長度上的數字字符串。

所以測試做這樣的事情:

str='1234' 

if re.match('\d{4,}',str): 
    print 'Max digit string too long!' 

>>> Max digit string too long! 
+0

爲什麼4?我希望'{1,3}'符合要求;四個肯定超過「最多三個」。 – tripleee

+0

@tripleee'OP'正在嘗試驗證字符串,只允許在一行中最多3個,所以您需要檢查'4 +'以查找字符串是否正確。 –

+0

其實我也不會檢查4+數字串在一排,所以如果字符串中包含0,1,2或3個數字在一排的很好,但是當它含有4+號碼,然後不精 – wasp256

0

\d{0}相匹配的所有可能的字符串。目前尚不清楚「不起作用」是什麼意思,但如果您希望將數字與字符串匹配,請將重複運算符增加到{1,3}

如果你想排除的4個或更多的運行,你可以試試(?:^|\D)\d{1,3}(?:\D|$),當然,如果你想捕捉的比賽中,使用捕捉周圍\d{1,3}括號。

0

可能有幾個原因:既然你想\d搜索數字或數字

  • ,你應該拼寫爲"\\d"r"\d""\d"可能正常工作,但只是因爲d在字符串中不是特殊的(尚未)。 "\n""\f""\r"會做一些完全不同的事情。檢查re module documentation並搜索「原始字符串」。

  • "\\d{0,3}"將匹配任何事情,因爲{0,3}的意思是「零漲幅高達三」。所以,它會匹配任何字符串的開始,因爲任何字符串都以空字符串開頭。

  • 或者,也許你想會尋找那些只有零到三個數字,而不是其他的字符串。在這種情況下,您想使用r"^\d{0,3}$"之類的東西。原因是正則表達式匹配字符串中的任何位置(或者只在開始時使用re.match而不使用re.search)。 ^字符串的開頭匹配,並通過$把那些你不符合任何之前或之後\d{0,3}有任何兩端的端匹配,所以。

0

您使用的方法是找到0-3數字的子字符串,它不能達到你的擴展。 我解決:

>>> import re 
>>> re.findall('\d','ds1hg2jh4jh5') 
['1', '2', '4', '5'] 
>>> res = re.findall('\d','ds1hg2jh4jh5') 
>>> len(res) 
4 
>>> res = re.findall('\d','23425') 
>>> len(res) 
5 

因此,未來你只需要使用「如果」來判斷數字的號碼。