2015-11-05 32 views
1

我想正常化一些數據在Python中取代#與NUMBER如果數字如下。 #和數字之間也可以有一個選項空間。以下是我到目前爲止。我很難想出如何保留空間,如果它在那裏。Python的正則表達式與特殊字符,可選空間和任意數量

string_stuff = re.sub(ur'#\s?[0-9]', 'NUMBER \1', string_stuff) 

我知道上面的代碼匹配其中一個數字,但是如何匹配所有數字?以下是一些例子。

# 334534 > NUMBER 334534 
#657 > NUMBER 657 
#234234234 > NUMBER 234234234 

任何幫助表示讚賞!謝謝。

回答

0

您需要一個捕獲組(由parens表示)。該組內部將被替換爲\1。您還需要匹配一個或多個數字。 +匹配一個或多個前一個元素。

string_stuff = re.sub(ur'#\s?([0-9]+)', 'NUMBER \1', string_stuff) 
0

您需要將[0-9]放入捕獲組中,以便您可以在替換零件中反向引用它。

string_stuff = re.sub(r'#\s?([0-9])', r'NUMBER \1', string_stuff) 

DEMO

0

我會用前瞻做到這一點:

re.sub(ur"#(?=\s?[0-9])", "NUMBER", string_stuff) 

這實際上不更換可選空間+數字 - 它甫一使用它們來搭配。