2013-08-01 25 views
0

我想從字符串中獲得一個數字,如font: bold 13 Arial - >13。什麼是最優雅和Pythonic的方式來做到這一點?什麼是在字符串中查找數字的優雅方法?

但是,我也需要數字的「上下文」。我想改變它,然後重建原(如font: bold 13 Arial - >font: bold 14 Arial

+6

正則表達式 –

+2

嘗試使用正則表達式「\ d +」 –

+1

@David Robinson您應該將其作爲答案發布,以便它可以被接受。 – Martin

回答

3

這將讓你的號碼作爲字符串

>>> import re 
>>> num_regex = re.compile(r'\d+') 
>>> num_regex.findall("font: bold 13 Arial") 
['13'] 

從那裏,你可以拉出的第一個元素,並投以INT。

>>> num_regex = re.compile(r'\d+') 
>>> num_regex.sub('14', "font: bold 13 Arial") 
'font: bold 14 Arial' 

同樣,你可以使用search代替findall

>>> num_regex = re.compile(r'(\d+)') 
>>> matcher = num_regex.search("font: bold 13 Arial") 
>>> matcher.groups() 
('13',) 
>>> matcher.group(1) 
'13' 

既然你現在說你要更換號碼的內容,你可以使用sub方法去做最後,如果你想做一些像當前值遞增1,並且有非常不可讀的代碼那麼這應該做的伎倆:

import re 

source = "font: bold 13 Arial" 
print re.sub(r'\d+', str(int(re.findall(r'\d+', source)[0])+1), source) 

OUTPUT:

font: bold 14 Arial 

這是比較有用的方法,但,沒有錯誤處理和輸入清理。在這種形式下,請謹慎使用。 :P

num_rex = re.compile(r'\d+') 

def increment_str_number(source): 
    return num_rex.sub(str(int(num_rex.findall(source)[0])+1), source) 

最後,以取代所有的數字,假設有三分之一以上的源(雖然只是一會的工夫太):

import re 
num_rex = re.compile(r'\d+') 

def increment_str_number(source): 
    nums = set(num_rex.findall(source)) 
    for num in nums: 
     num = int(num) 
     source = re.sub("%s" % (num), "%s" % (num + 1), source) 
    return source 

INPUT
字體:粗體13 Arial字體15

OUTPUT
字體:粗體14 Arial字體16

+0

這個想法是增加數字,而不是取代它,所以你必須檢索數字本身以及周圍環境,但我想我可以使用拆分。 – Glycan

+0

@Glycan:看到我的編輯,當你輸入該評論時,我做得很對。 – sberry

+0

我不會把惡意輸入放在我自己的代碼中x) – Glycan

相關問題