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

时间:2020-04-02 12:17:27

标签: python regex

我想从主机名中提取服务器类型,并用下划线替换其余字符,以便随后将其与SQLite中的LIKE模式匹配一​​起使用

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

>>> host = 'webus01'
>>> location = 'us'
>>> parts = list(host.partition(location))
>>> parts
['web', 'us', '01']
>>> parts[1] = "_" * len(parts[1])
>>> parts[2] = "_" * len(parts[2])
>>> "".join(parts) + ".%"
'web____.%'

但是如果hostnamelocation开头或包含>>> 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

然后我最好使用location来只匹配数字前的>>> import re >>> re.sub(r'it\d+.*', '_', 'utilityit01a') 'utility_' re.sub函数似乎很适合完成此任务,但是我不确定如何替换所有字符而不是整个匹配组:

utility_____.%

在这种情况下,输出应为:jQuery(function ($) { $(".box").click(function() { $(".box").removeClass("active"); $(this).addClass("active"); $(".boxContent").removeClass("show-content"); var target = $(this).attr("target"); $(".boxContent_" + target).addClass("show-content"); }); });

2 个答案:

答案 0 :(得分:1)

看起来像您需要的

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____.%

答案 1 :(得分:1)

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

>>> import re
>>> host = 'utilityit01'
>>> substr = re.findall(r'it\d+.*', host)
>>> substr
['it01a']
>>> host.replace(substr[0], len(substr)*'_')
'utility_____'