【问题标题】:Using str.replace to replace non-alphanumeric characters with asterisks in a for loop使用 str.replace 在 for 循环中用星号替换非字母数字字符
【发布时间】:2019-10-08 04:41:16
【问题描述】:

我正在尝试使用 str.replace 方法仅用 2 行重写第 5-8 行

s = 'pa55w-r@'
result = ''
for c in s:
    if(c not in 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789'):
    result += '*'
else:
    result += c
print(result)

以下是我到目前为止所得到的。

s = 'pa55w-r@'
result = ''
for c in s:
    if(c not in 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789'):
        result = s.replace(c,"*")
print(result)

但是,我不确定为什么输出是

pa55w-r*

而不是

pa55w*r*

原来的代码有哪些?我尝试与Using str.replace in a for loop 的另一个示例进行比较,但是,建议添加一个我实际上已删除的 else 语句,以将代码从 3 行压缩为 2 行。任何输入将不胜感激

啊,我差点忘了提,我不能使用 regex 方法,这似乎是我迄今为止在整个 stackoverflow 中搜索提示时看到的常见答案。

【问题讨论】:

  • Your first method is working fine,我无法重现您的错误。请注意,re.sub(r'[^A-Za-z0-9]', '*', s) 是一种更加简洁明了的方法恕我直言。
  • 感谢蒂姆的输入。目前刚刚完成了关于类和流控制的学习,我们的教授通过一些字符串方法来增加一些东西。当我更深入地了解时,肯定会研究正则表达式!

标签: python string replace


【解决方案1】:

问题是 result 变量只看到一个替换通道。解决方法是对 s 进行连续分配,使其越来越接近预期结果:

s = 'pa55w-r@'
for c in s:
    if(c not in 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789'):
        s = s.replace(c,"*")
print(s)

这个输出:

pa55w*r*

【讨论】:

  • 嗨,雷蒙德,我确实注意到了!当我在我的代码中包含result += s.replace(c,'*') 时,我收到了p55w*r@p@55wr* 的输出,每个星号都应该在!这就是你所说的只有“一个”替换通行证的意思吗?我确实提出了一个选项,我打印的 s 实际上与您的代码相似。我只是想检查一下,绝对没有其他方法可以重写 OG 代码,将第 5-8 行替换为仅打印 2 行的结果(也无需使用正则表达式)。再次感谢大家的帮助!
猜你喜欢
  • 1970-01-01
  • 2016-10-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-05-31
  • 1970-01-01
  • 2012-09-04
  • 1970-01-01
相关资源
最近更新 更多