我很抱歉,但是我无法找到谷歌给我的任何解决方案的工作解决方案(某些网站上的几个“食谱”非常接近,但是很老了,我还没有'找到了能给我正在寻找的结果的东西。
我正在重命名文件,所以我有一个吐出文件名的函数,为此我只是使用'test_string': 因此,首先删除所有的点,(和下划线)和东西 - 因为这些是所有这些教授所做的最常见的事情,并使所有这些东西无法处理(或看)而不删除。 5例子:
test_string_1 = 'legal.studies.131.race.relations.in.the.United.States.'
'legal.studies' - > '法律研究'
test_string_2 = 'mediastudies the triumph of bluray over hddvd'
'mediastudies' - > '媒体研究','蓝光' - > 'Blu-ray,'hddvd' - > 'HD DVD'
test_string_3 = 'computer Science Microsoft vs unix'
'计算机科学' - > '计算机科学','unix' - > 'UNIX'
test_string_4 = 'Perception - metamers dts'
'感知'已经很好了(但是谁在乎),大图是他们想要将音频信息保存在那里,所以'dts' - > DTS
test_string_5 = 'Perception - Cue Integration - flashing dot example aac20 xvid'
'aac20' - > 'AAC2.0','xvid' - > '的XviD'
目前我通过以下方式运行:
new_string = re.sub(r'(?i)Legal(\s|-|)Studies', 'Legal Studies', re.sub(r'(?i)Sociology', 'Sociology', re.sub(r'(?i)Media(\s|-|)Studies', 'Media Studies', re.sub(r'(?i)UNIX', 'UNIX', re.sub(r'(?i)Blu(\s|-|)ray', 'Blu-ray', re.sub(r'(?i)HD(\s|-|)DVD', 'HD DVD', re.sub(r'(?i)xvid(\s|-|)', 'XviD', re.sub(r'(?i)aac(\s|-|)2(\s|-|\.|)0', 'AAC2.0', re.sub(r'(?i)dts', 'DTS', re.sub(r'\.', r' ', original_string.title()))))))))))
我让他们一起在一条线上擦过;因为我没有更改/更新它(我的大脑/ ADD的工作方式)更容易让它尽可能地最小/偏离我做其他事情一旦我没有弄乱继续这部分。
所以,以我的例子:
new_test_string_1 = 'Legal Studies 131 Race Relations In The United States'
new_test_string_2 = 'Media Studies The Triumph Of Blu-ray Over HD DVD'
new_test_string_3 = 'Computer Science Microsoft Vs UNIX'
new_test_string_4 = 'Perception - Metamers DTS'
new_test_string_5 = 'Perception - Cue Integration - Flashing Dot Example AAC2.0 XviD'
然而,随着我越来越多这些它真的开始成为我想要字典或其他东西的东西 - 我不想把代码炸成任何疯狂的东西,但我' d喜欢能够添加新的替换品,因为需要添加的实际例子(例如,那里有很多音频编解码器/容器/ whatevers,看起来我可能不得不把它们全部扔掉在)。我对这个master-list / dictionary / whatever使用的方法没有意见。
大图:我正在修复文件名中的空格和下划线,用大写的东西替换掉一堆狗屎(目前,除了我正在制作的re.subs之外,普遍标题 - 包装它在大多数情况下,大写不完美,输出中可能有或没有空格,短划线或点。)
同样,单线,无名(如lambda)函数更可取。
P.S。 对不起有些奇怪和一些最初缺乏清晰度。其中一个问题是在我的专业/研究中,大部分内容实际上非常简单,其他课程需要所有蓝光,HD DVD,DTS,AAC2.0,XviD等。
答案 0 :(得分:2)
>>> import re
>>> def string_fix(text,substitutions):
text_no_dots = text.replace('.',' ').strip()
for key,substitution in substitutions.items():
text_no_dots = re.sub(key,substitution,text_no_dots,flags=re.IGNORECASE)
return text_no_dots
>>> teststring = 'legal.studies.131.race.relations.in.the.U.S.'
>>> d = {
r'Legal(\s|-|)Studies' : 'Legal Studies',
r'Sociology' : 'Sociology',
r'Media(\s|-|)Studies' : 'Media Studies'
}
>>> string_fix(teststring,d)
'Legal Studies 131 race relations in the U S'
这是一个更好的方法,没有字典
>>> teststring = 'legal.studies.131.race.relations.in.the.U.S.'
>>> def repl(match):
return ' '.join(re.findall('\w+',match.group())).title()
>>> re.sub(r'Legal(\s|-|)Studies|Sociology|Media(\s|-|)Studies',repl,teststring.replace('.',' ').strip(),flags=re.IGNORECASE)
'Legal Studies 131 race relations in the U S'
答案 1 :(得分:1)
import re
def string_fix(filename, dict):
filename = filename.replace('.', ' ')
for key, val in dict.items():
filename = re.sub(key, val, filename, flags=re.IGNORECASE)
return filename
dict = {
r'Legal[\s\-_]?Studies' : 'Legal Studies',
r'Media[\s\-_]?Studies' : 'Media Studies',
r'dts' : 'DTS',
r'hd[\s\-_]?dvd': 'HD DVD',
r'blu[\s\-_]?ray' : 'Blu-ray',
r'unix' : 'UNIX',
r'aac[\s\-_]?2[\.]?0' : 'AAC2.0',
r'xvid' : 'XviD',
r'computer[\s\-_]?science' : 'Computer Science'
}
string_1 = 'legal.studies.131.race.relations.in.the.United.States.'
string_2 = 'mediastudies the triumph of bluray over hddvd'
string_3 = 'computer Science Microsoft vs unix'
string_4 = 'Perception - metamers dts'
string_5 = 'Perception - Cue Integration - flashing dot example aac20 xvid'
print(string_fix(string_1, dict))
print(string_fix(string_2, dict))
print(string_fix(string_3, dict))
print(string_fix(string_4, dict))
print(string_fix(string_5, dict))