如何用下划线替换所有空格并删除所有括号而不使用replace()函数?
问题描述:
这是我做的。我知道这绝对是错误的。我想知道如何使这个工作?谢谢!如何用下划线替换所有空格并删除所有括号而不使用replace()函数?
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'))
答
可以使用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
+0
这是最好的版本恕我直言 –
答
import re
def demicrosoft (fn):
return '_'.join((''.join(re.split(r'[()]', fn)).split()))
答
从禅Python:可读性计数!
def demicrosoft (fn):
dest = ""
for char in fn:
if char == ' ':
dest += '_'
elif char not in '()':
dest += char
return dest
答
newString = re.sub("([\s\(\)])",lambda m:"_" if b.group(0) not in "()" else "",targetString)
即时猜测它的性能的原因,他们希望O(N)
发电机表达应该工作...这里是re
解决
究竟是不是工作,你有什么期待呢? –
它说有一个TypeError:translate()只需要一个参数(给出2) – amflynn
这应该被添加到你的问题,因为这是你真正想问的问题。另外,解释一下你“关于1个参数,但是你给了2个”的疑惑。 –