Python-正则表达式通过1个或多个连字符拆分文件名

Python-正则表达式通过1个或多个连字符拆分文件名,python,regex,string,python-2.7,Python,Regex,String,Python 2.7,这将读取文件名并使用正则表达式检查正确的格式。问题是连字符可能并不总是存在,因此re.split()可能会产生不可预测的结果,这使得以后很难“重建”正确的字符串格式,但我不排除这种方法。split()的另一个问题是,任何空格在之后都会保留,因此在重新构造字符串之后就没有任何好处了。因此,我尝试了另一个带有finditer()的正则表达式和另一个findall()的正则表达式,但它们仍然只能找到前6位数字 以下是正确文件名的示例(不正确的名称有不同的空白): 201308-(82608)-MAC

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

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

201308-(82608)-MAC 2233-007-微积分方法-Klingler,Lee.txt

以下是我一直在尝试的一些内容,我将为您省去其余的麻烦(围绕它的更大程序):

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

201308-(82609)-MAC 2233-007-微积分方法-Klingler,Lee.txt


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

这是一个简单的原理,将任何连字符与数字/非字母数字相邻或非数字/字母数字相邻进行规范化

>>> 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'
>>重新导入
>>>name=“201308-(82609)-MAC 2233-007-微积分方法-Klingler,Lee.txt”

>子(r)(?)到目前为止,你尝试过什么正则表达式?好的是缺少空间,但是额外的空间仍然出现。考虑一下:<代码> 201308-(82609)-Mac 223 3-7的微积分方法- Krnl,李。TXT’< /Cord> BTW,如果你有空格序列,那么只使用“*”而不是“?”“在连字符的两边。现在知道了,谢谢你耐心地解释。效果很好。”。
>>> 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'