Python regex将文件名拆分为1个或多个连字符

2024-05-01 21:57:50 发布

您现在位置:Python中文网/ 问答频道 /正文

这将读入文件名并使用regex检查正确的格式。问题是连字符可能并不总是存在,因此re.split()可能会产生一个不可预测的结果,这使得以后很难“重建”一个正确的字符串格式,但我不排除这种方法的可能性。split()的另一个问题是,任何空白都会在之后保留,因此在重建字符串之后,任何好处都会被抵消。所以我尝试了另一个带有finditer()和另一个findall()的正则表达式,但仍然只能找到前6位数字。在

以下是正确文件名的示例(不正确的名称有不同的空格):

201308 - (82608) - MAC 2233-007-Methods of Calculus - Klingler, Lee.txt

以下是我一直在尝试的一些方法,我将省去其他的麻烦(围绕它的更大计划):

#res = re.findall(r"[\.\-]",f0)
res = [str(m.group(0)) for m in re.finditer(r'[^\-]', f0)]
if res: print res
else: print "error on %s"%res


s0 = "['@ @ @ @ @ @ @ @ 201308    ', '    (12345)', 'ABC 2233L', '007', 'course Name', 'last, first.txt']"
#s = f0.split('-'); s = s[0]; print "sssss  ",s#,type(s)

包含不正确空格的字符串示例如下:

201308-(82609)-MAC 2233-007-Methods of Calculus - Klingler, Lee.txt

主要的目标是接收文件名(任何数量的符号、字母、数字、空白都可能完全错误),并将其转换为正确的格式。由于您不能检查每个可能的错误,所以我尝试使用这些方法至少修复额外(或缺少)空白。在


Tags: 方法字符串retxt示例文件名格式res
1条回答
网友
1楼 · 发布于 2024-05-01 21:57:50

这是一个简单的原则,规范化任何连字符与数字/非字母数字相邻,或非数字/字母数字相邻。在

>>> import re
>>> name = "201308-(82609)-MAC 2233-007-Methods of Calculus - Klingler, Lee.txt"
>>> re.sub(r"(?<=[0-9]) ?- ?(?=[^0-9a-zA-Z])", " - ", re.sub(r"(?<=[^0-9]) ?- ?(?=[0-9a-zA-Z])", " - ", name))
'201308 - (82609) - MAC 2233-007-Methods of Calculus - Klingler, Lee.txt'

相关问题 更多 >