我想從字符串中獲得一個數字,如font: bold 13 Arial
- >13
。什麼是最優雅和Pythonic的方式來做到這一點?什麼是在字符串中查找數字的優雅方法?
但是,我也需要數字的「上下文」。我想改變它,然後重建原(如font: bold 13 Arial
- >font: bold 14 Arial
)
我想從字符串中獲得一個數字,如font: bold 13 Arial
- >13
。什麼是最優雅和Pythonic的方式來做到這一點?什麼是在字符串中查找數字的優雅方法?
但是,我也需要數字的「上下文」。我想改變它,然後重建原(如font: bold 13 Arial
- >font: bold 14 Arial
)
這將讓你的號碼作爲字符串
>>> 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
正則表達式 –
嘗試使用正則表達式「\ d +」 –
@David Robinson您應該將其作爲答案發布,以便它可以被接受。 – Martin