【问题标题】:Replacing only the alphabetical letters in a string仅替换字符串中的字母
【发布时间】:2012-10-19 02:23:33
【问题描述】:

我需要返回给定的谜题,每个字母字符都替换为隐藏字符。

HIDDEN = '^' 

def blah(r):
    r = HIDDEN * len(r)
    return r

此函数可用于替换我需要的任何字符串,但问题特别要求替换每个 ALPHABETIC 字符。

所以我不能将 4'? 替换为 HIDDEN,因为它们不是字母字符。

我该怎么办?

【问题讨论】:

  • @sberry:作业标签已经是deprecated
  • 那么,您将如何确定哪些字符是字母字符?你肯定知道一些方法来做到这一点?遍历所有字母?正则表达式?筛选?做一些事情来展示一个尝试,也许我们可以帮助你refine你的代码。
  • @DSM,并被替换?我希望...
  • @mhawke:他们必须在同一个班级。

标签: python string replace


【解决方案1】:

一种方法:使用翻译方法:

import string

table = string.maketrans(string.ascii_letters, '^'*len(string.ascii_letters))

def blah(r):
    return r.translate(table)

另一种方法:使用re.sub

import re

def blah(r):
    return re.sub(r'[a-zA-Z]', r'^', r)

【讨论】:

  • 虽然这是一个完全合适的答案,但我们应该期待 OP 付出更多努力。
  • 为了以后的访问者,我喜欢给出完整的答案。我在支持教学法和支持 SO 的意图之间左右为难……
  • 重点。可惜它不得不变成这样。
  • def blah(r): import re return re.sub(r'[a-zA-Z]',HIDDEN, r) 我把它稍微改成了那个^^,因为我认为作业是在函数中调用老师给出的隐藏预设的想法测试结果很好,所以应该很好用吧?
【解决方案2】:

查看maketrans,您可以创建一个从string.letters^ 的转换表,然后使用它。

【讨论】:

    【解决方案3】:

    我一直觉得maketrans 有点难以理解,所以我通常会使用更原始的方式来做这些事情(这对我来说更有意义):

    def make_hidden(instr):
        return ''.join(c if c.isalpha() else '^' for c in instr)
    

    【讨论】:

    • c if c.isalpha() else '^' 可能更干净;那么你根本不需要string.ascii_letters
    • @nneonneo -- 太棒了! (+1 表示您的评论和原始答案)
    【解决方案4】:

    返回给定的谜题,每个字母字符都被隐藏字符替换。

    HIDDEN = '^' 
    
    def blah(r):
    
        new_r = ""
    
        for ch in r:
    
            if ch in 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ':
    
               new_r += HIDDEN 
    
            else:
    
               new_r += ch
    
         return new_r
    

    【讨论】:

      猜你喜欢
      • 2012-05-31
      • 1970-01-01
      • 2019-02-06
      • 1970-01-01
      • 2023-03-23
      • 1970-01-01
      • 2014-09-03
      • 2017-07-09
      • 2022-09-24
      相关资源
      最近更新 更多