14

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

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

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

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

还是我必须做一个正则表达式?

4

6 回答 6

28

使用正则表达式:

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

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

于 2013-09-29T23:24:41.603 回答
14

你不能; 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'
于 2013-09-29T23:24:33.140 回答
8

只是为了多样化,一些非正则表达式方法:

>>> 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'

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

于 2013-09-29T23:30:43.010 回答
3

使用translate来源)的解决方案:

remove_digits = str.maketrans('0123456789', '%%%%%%%%%%')
'_u1_v1'.translate(remove_digits)  # '_u%_v%'
于 2019-12-04T23:30:29.617 回答
1

如果要删除字符串中的所有数字,可以使用translate从字符串中删除数字):

from string import digits
remove_digits = str.maketrans('', '', digits)
str = str.translate(remove_digits)

所有功劳归@LoMaPh

于 2020-04-25T16:16:59.080 回答
0
temp = re.findall(r'\d+', text) 
res = list(map(int, temp))

for numText in res:
    text = text.replace(str(numText), str(numText)+'U')
于 2020-04-15T07:24:41.087 回答