这就是我所做的。我知道这绝对是错的。我想知道如何使这个工作吗? 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'))
答案 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
解决方案