我想通过用%d
替换数字来创建一个新字符串,例如:
Name.replace( "_u1_v1" , "_u%d_v%d")
...但是数字1
可以是任何数字,例如"_u2_v2.tx"
我可以给replace()
一个通配符来预期任何数字吗?与"_u"%d"_v"%d".tx"
或者我必须做一个正则表达式吗?
答案 0 :(得分:15)
使用正则表达式:
>>> import re
>>> s = "_u1_v1"
>>> print re.sub('\d', '%d', s)
_u%d_v%d
\d
匹配任何数字0-9。 re.sub
将%d
答案 1 :(得分:12)
你不能; 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'
答案 2 :(得分:5)
只是为了变化,一些非正则表达方法:
>>> 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'
(说实话,虽然我通常是反正则表达式,但这个案例很简单,我可能会使用它们。)
答案 3 :(得分:0)
使用setitem
({{3}})的解决方案:
translate
答案 4 :(得分:0)
temp = re.findall(r'\d+', text)
res = list(map(int, temp))
for numText in res:
text = text.replace(str(numText), str(numText)+'U')
答案 5 :(得分:0)
如果要删除字符串中的所有数字,可以使用translate
(Removing numbers from string):
remove_digits = str.maketrans('', '', '0123456789')
str = str.translate(remove_digits)
all credit goes to @LoMaPh