【问题标题】:How to replace all spaces by underscores and remove all the parentheses without using replace() function?如何在不使用 replace() 函数的情况下用下划线替换所有空格并删除所有括号?
【发布时间】:2023-03-23 13:14:01
【问题描述】:

这就是我所做的。我知道这绝对是错误的。我想知道如何使这个工作?谢谢!

import re
def demicrosoft (fn):

"""Clean up a file name.

Remove all parentheses and replace all spaces by underscores.

Params: fn (string): 
Returns: (string) clean version of fn
"""

fn = re.sub('[()]', '', fn)
for ch in ['']:
    fn = fn.translate(ch, "_")
return fn

print(demicrosoft('Quercus stellata (26).jpg'))

【问题讨论】:

  • 究竟是什么不符合您的预期?
  • 它说有一个 TypeError: translate() 只接受一个参数(给定 2 个)
  • 这应该添加到您的问题中,因为这确实是您要问的问题。另外,解释一下“它需要 1 个参数,但你给出了 2 个参数”让您感到困惑的地方。
  • 多么愚蠢的要求……如果这是针对测试中的 GL 类……如果这是针对面试中的工作 GL……在任何一种情况下,正确答案都是 @987654322 @

标签: python replace removeall


【解决方案1】:
newString = re.sub("([\s\(\)])",lambda m:"_" if b.group(0) not in "()" else "",targetString)

我猜测它是出于性能原因,他们希望 O(N) 生成器表达式应该可以工作......这是一个 re 解决方案

【讨论】:

    【解决方案2】:

    来自 Python 之禅:可读性很重要!

    def demicrosoft (fn):
        dest = ""
        for char in fn:
            if char == ' ':
                dest += '_'
            elif char not in '()':
                dest += char
        return dest
    

    【讨论】:

      【解决方案3】:
      import re
      def demicrosoft (fn):
        return '_'.join((''.join(re.split(r'[()]', fn)).split()))
      

      【讨论】:

        【解决方案4】:

        您可以将join 与生成器结合使用,该生成器在处理过滤掉括号和用下划线替换空格的逻辑时迭代字符串中的字符:

        PARENS = {'(', ')'}
        
        def demicrosoft(string):
            return ''.join('_' if c == ' ' else c for c in string if c not in PARENS)
        
        print(demicrosoft('Quercus stellata (26).jpg'))  # Quercus_stellata_26.jpg
        

        【讨论】:

        • 这是最好的版本,恕我直言
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-01-10
        • 1970-01-01
        • 2020-11-04
        • 1970-01-01
        • 2014-01-14
        • 1970-01-01
        相关资源
        最近更新 更多