Python 匹配字符串并替换剩余字符

Python 匹配字符串并替换剩余字符,python,regex,Python,Regex,我想从主机名中提取服务器类型,并用下划线替换剩余的字符,这样我就可以在 我最初的方法是这样的(这是例外输出): 但是,如果主机名以位置开始或包含名称,则这将不起作用: >>> host = 'utilityit01' >>> pod = 'it' >>> parts = list(host.partition(location)) >>> parts ['utilityit01', '', ''] >>>

我想从主机名中提取服务器类型,并用下划线替换剩余的字符,这样我就可以在

我最初的方法是这样的(这是例外输出):

但是,如果
主机名以
位置开始或包含
名称,则这将不起作用:

>>> host = 'utilityit01'
>>> pod = 'it'
>>> parts = list(host.partition(location))
>>> parts
['utilityit01', '', '']
>>> parts[1] = "_" * len(parts[1])
>>> parts[2] = "_" * len(parts[2])
>>> "".join(parts) + ".%"
'utilityit01.%'
然后我想最好使用
RegEx
,以便只匹配数字前面的
位置。
该函数似乎是此任务的理想候选函数,但我不确定如何替换所有字符,而不是整个匹配组:

>>> import re
>>> re.sub(r'it\d+.*', '_', 'utilityit01a')
'utility_'
这种情况下的输出应该是:
实用程序.%

看起来像是您需要的

import re
print(re.sub(r'(it\d+.*)', lambda x: '_'*len(x.group(1))+".%" , 'utilityit01a'))
print(re.sub(r'(us\d+.*)', lambda x: '_'*len(x.group(1))+".%" , 'webus01'))
输出:

utility_____.%
web____.%

您可以先找到要替换的子字符串,然后根据其长度进行替换:

>>> import re
>>> host = 'utilityit01'
>>> substr = re.findall(r'it\d+.*', host)
>>> substr
['it01a']
>>> host.replace(substr[0], len(substr)*'_')
'utility_____'
可能是
re.sub(r'('+location+r'\d+.*),lambda m:''.'*len(m.group(1))+'.%',host)
>>> import re
>>> host = 'utilityit01'
>>> substr = re.findall(r'it\d+.*', host)
>>> substr
['it01a']
>>> host.replace(substr[0], len(substr)*'_')
'utility_____'