我是Python编程的新手。我被困在某一点。假设我有字符串“ hello-world”。我想用“ *”替换该字符串的所有字符,除了第一个和最后一个。因此结果将为"h***-****d"
。
执行此操作的一种方法如下:
In [1]: s = "hello-world"
In [2]: s[0] + "*"*(len(s)-2) + s[-1]
Out[2]: 'h*********d'
如果我想用“ *”替换所有字符,除了前2个字符和后2个字符
In [3]: s[:2] + "*"*(len(s)-4) + s[-2:]
Out[3]: 'he*******ld'
有没有解决这些类型问题的漂亮方法。任何帮助,将不胜感激。谢谢。
答案 0 :(得分:0)
您可以定义一个不重复自己的函数:
def replace(s, n):
if len(s) > n*2:
return s[:n] + '*'*(len(s)-n*2) + s[-n:]
return s
print(replace('hello-world', 1)) # h*********d
print(replace('hello-world', 2)) # he*******ld
print(replace('hello', 2)) # he*lo
print(replace('hello', 3)) # hello
您还可以使用某种字符串格式来代替串联(这应该更有效),例如f-strings适用于3.6及更高版本:
def replace(s, n):
if len(s) > n*2:
return f"{ s[:n] }{ '*'*(len(s)-n*2) }{ s[-n:] }"
return s
答案 1 :(得分:0)
我认为您想做的是这样
def obscure(string, n):
characters = list(string)
characters[n:-n] = '*' * len(characters[n:-n])
obscured = ''.join(characters)
return obscured
将字符串转换为字符列表。替换您要遮盖的那些。然后将列表重新加入字符串。
答案 2 :(得分:0)
您可以使用str.join
(和string
模块来检查字母):
s[0] + ''.join(['*' if i in string.ascii_letters else i
for i in s[1:-1]]) + s[-1]
由于您说过想用h****-****d
代替连字符,因此您需要测试字符是否为字母。您可以将string.ascii_letters
更改为:
chars = 'abcdefghijklmnopqrstuvwxyz'
chars = chars + chars.upper() + '0123456789' # + 'some_other_chars'
...如果要包含其他字符,例如数字或标点符号。或者,您可以写出要手动替换的字母。
您可能还想执行检查以查看字符串是否为3个字符或更多,以免出现错误。
答案 3 :(得分:-2)
您可以尝试一下。
s="hello-world"
for i in s[1:-1]:
if i.isalpha():
s=s.replace(i,"*")