2013-02-26 590 views
1

我想刪除3或小於3位的數字。有人可以幫助我一個這樣做的正則表達式嗎?如何創建匹配3或小於3位數字的正則表達式?

目前,我的代碼刪除了它找到的所有數字。

 # Cleans Numbers 
    def cleanNumbers(stringToClean): 
     stringToClean = re.sub(r'[0-9]*', r'', stringToClean) 

     print 'String after cleaning : %s' %stringToClean 

     return stringToClean 

數字將被空間包圍。示例字符串我傳遞給函數:

一段時間後Win8客戶端上的連接中斷。 [持久] 123 1 22 333 4444 554665 645fdgf45 ds3434 457870978934787843 345342kl

我調用上面的功能如下:

# Main function, calls other functions   
def main(): 

    # Parsing the input query 
    searchQuery = open('input.txt', 'r').read() 
    print 'Input query : %s' %searchQuery 

    # Cleaning the input query 
    string = CleanUpText.cleanNumbers(searchQuery) 
+0

你能不能讓你的心,如果你想「刪除少於3位數字「或」3或少於3位數字「? – Jens 2013-02-26 21:16:53

+0

數字是否被空格或其他(非數字)字符包圍,或者是什麼?你有一些樣本字符串? – iamnotmaynard 2013-02-26 21:24:42

+0

@iamnotmaynard沒關係。如果數字被數字包圍(?!),他們會是......更大的數字。根據定義,它們會比三位數字長,並且不會被刪除。 – Madbreaks 2013-02-26 21:26:17

回答

5

\b[0-9]{1,3}\b找到最多三位數的數字塊。

+0

op說了很多東西.. *如何創建一個正則表達式匹配3或小於3的數字* – ogzd 2013-02-26 21:23:32

+0

這對我有效。 stringToClean = re.sub(r'\ b [0-9] {1,3} \ b',r'',stringToClean)Removed - > 123 1 22 333 from input string。謝謝! P.S .:什麼是操作? – Radz 2013-02-26 21:34:09

+0

我相信這是*原創海報* – ogzd 2013-02-26 22:07:29

-1

你可以使用正則表達式這樣

r'\b[0-9]{1,2}\b' 

編輯:對不起寫道:我的答案很快就沒有真正思考。你必須使用邊界,所以你不捕獲3456例如

+1

不會捕獲'1234'嗎? – ogzd 2013-02-26 21:14:20

1
re.sub(r'[0-9]{,3}',r'',stringToClean) 
1

我已經糾正了問題,「3個或少於3」

鑑於這種情況,應該是簡單的:\b\d{1,3}\b