2013-09-29 36 views
3

我想用%d代替數字,例如,使一個新的字符串替換數字:與str.replace()

Name.replace("_u1_v1" , "_u%d_v%d") 

...但數量1例如可以是任何數字"_u2_v2.tx"

我可以給replace()一個通配符來期望任何數字嗎?像"_u"%d"_v"%d".tx"

或者我必須做一個正則表達式嗎?

+0

它沒有任何意義,您用任何數字替換值。你必須定義數字。如果您有一些定義數字或輸入的函數,則傳入保存該值的變量。例如,Name.replace(「_ u1_v1」,「_u」+ variableName +「_v」+ variableName)。 – JungJoo

回答

11

你不能; str.replace()只能使用文字文本只能使用

要替換的模式,使用正則表達式:

re.sub(r'_u\d_v\d', '_u%d_v%d', inputtext) 

演示:

>>> import re 
>>> inputtext = '42_u2_v3.txt' 
>>> re.sub(r'_u\d_v\d', '_u%d_v%d', inputtext) 
'42_u%d_v%d.txt' 
10

使用正則表達式:

>>> import re 
>>> s = "_u1_v1" 
>>> print re.sub('\d', '%d', s) 
_u%d_v%d 

\d任意數量的0-9匹配。 re.sub替換%d

4

只是爲了不同的號碼,一些非正則表達式的方法:

>>> s = "_u1_v1" 
>>> ''.join("%d" if c.isdigit() else c for c in s) 
'_u%d_v%d' 

,或者您需要將多個數字:

>>> from itertools import groupby, chain 
>>> s = "_u1_v13" 
>>> grouped = groupby(s, str.isdigit) 
>>> ''.join(chain.from_iterable("%d" if k else g for k,g in grouped)) 
'_u%d_v%d' 

(要誠實,雖然,雖然我通常是反正則表達式,但這種情況很簡單,我可能會使用它們。)