用str.replace()替换数字

use*_*582 6 python expression replace

我想通过替换数字来创建一个新的字符串%d,例如:

Name.replace( "_u1_v1" , "_u%d_v%d") 
Run Code Online (Sandbox Code Playgroud)

......但数字1可以是任何数字,例如"_u2_v2.tx"

我可以给出replace()一个通配符来指望任何数字吗?喜欢"_u"%d"_v"%d".tx"

或者我必须做一个正则表达式?

Ter*_*ryA 17

使用正则表达式:

>>> import re
>>> s = "_u1_v1"
>>> print re.sub('\d', '%d', s)
_u%d_v%d
Run Code Online (Sandbox Code Playgroud)

\d匹配任何数字0-9.re.sub用...替换数字%d


Mar*_*ers 13

你不能; str.replace()适用于文字文本.

要替换模式,请使用正则表达式:

re.sub(r'_u\d_v\d', '_u%d_v%d', inputtext)
Run Code Online (Sandbox Code Playgroud)

演示:

>>> 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'
Run Code Online (Sandbox Code Playgroud)


DSM*_*DSM 6

仅出于多样性,一些非正则表达式方法:

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

或者,如果您需要将多个数字分组:

>>> 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'
Run Code Online (Sandbox Code Playgroud)

(不过,老实说,尽管我通常是反正则表达式的,但这种情况很简单,我很可能会使用它们。)