如何用下划线替换所有空格并删除所有括号而不使用replace()函数?

时间:2016-10-03 21:45:03

标签: python replace removeall

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

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'))

4 个答案:

答案 0 :(得分:1)

您可以使用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

答案 1 :(得分:1)

import re
def demicrosoft (fn):
  return '_'.join((''.join(re.split(r'[()]', fn)).split()))

答案 2 :(得分:0)

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

DVTPlugInCompatibilityUUIDs

答案 3 :(得分:0)

newString = re.sub("([\s\(\)])",lambda m:"_" if b.group(0) not in "()" else "",targetString)

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