gpt4 book ai didi

python - bvCase Insensitive Regex Replacement 来自字典

转载 作者:行者123 更新时间:2023-11-28 16:48:56 26 4
gpt4 key购买 nike

抱歉,我无法从 Google 提供的任何解决方案中找到可行的解决方案(某些网站上的一些“食谱”非常接近,但太老了,我还没有找不到能给我想要的结果的东西。

我正在重命名文件,所以我有一个函数可以输出文件名,为此我只使用“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' --> '媒体研究', 'bluray' --> '蓝光, 'hddvd' --> 'HD DVD'

test_string_3 = 'computer Science Microsoft vs unix'

'计算机科学' --> '计算机科学', 'unix' --> 'UNIX'

test_string_4 = 'Perception - metamers dts'

'Perception' 已经很好了(但谁在乎),大局是他们想将音频信息保留在那里,所以 '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'

然而,随着我拥有越来越多的这些东西,它真的开始成为我想要一本字典或其他东西的那种东西——我不想把代码炸成任何疯狂的东西,但我我希望能够在现实生活中出现需要添加的示例时添加新的替代品(例如,那里有很多音频编解码器/容器/其他任何东西,看起来我可能不得不把它们全部扔掉在)。我对这个主列表/字典/任何东西使用的方法没有意见。

大图:我正在修复文件名中的空格和下划线,用大写的东西替换一堆狗屎(目前,除了我正在制作的 re.subs 之外,普遍使用标题外壳,这处理在很多情况下,大写字母并不完美,输入中可能有也可能没有输出应有的空格、破折号或点)。

同样,单行、未命名(例如 lambda)函数会更可取。

附言对于一些奇怪的地方和一些最初的不清晰之处,我们深表歉意。这里的问题之一是在我的专业/研究中,大部分内容实际上非常简单,其他类(class)需要所有蓝光、HD DVD、DTS、AAC2.0、XviD 等。

最佳答案

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

关于python - bvCase Insensitive Regex Replacement 来自字典,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10265210/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com