0

这会读入文件名并使用正则表达式来检查格式是否正确。问题是连字符可能并不总是存在,因此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

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

4

1 回答 1

1

这通过一个简单的原理起作用,用数字/非字母数字邻居或非数字/字母数字邻居规范任何连字符。

>>> 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'
于 2013-09-13T19:35:56.850 回答