我需要从文件名中提取艺术家,标题和评论组件, 下面是艺术家的例子 - 标题,艺术家 - 标题(评论)
ADNY - Omnipotent.flac
Community Recordings - Magic Circle (Drums In Space Mix).flac
此正则表达式仅匹配数字2,而不是数字1
(^.*)\s-\s(.*)\s(\(.*\))
Community Recordings
Magic Circle
(Drums In Space Mix)
如果我追加?在它的最后,两者都匹配,但对于数字2,评论是标题的一部分:
(^.*)\s-\s(.*)\s(\(.*\))?
ADNY
Omnipotent.flac
Community Recordings
Magic Circle (Drums In Space Mix).flac
如何拆分文件名可能有注释的组件?
(得到这样的东西)
ADNY
Omnipotent.flac
Community Recordings
Magic Circle
(Drums In Space Mix).flac
(使用.NET正则表达式)
答案 0 :(得分:1)
如果我了解您的组件,请尝试下面的正则表达式。既然你提到你正在使用.NET风格,我选择使用Name'd捕获组:
^(?<Artist>.*?)\s*-\s*(?<Title>.*?(?=\s+\(|\.))(?:\s*\((?<Description>[^)]+))?
我还选择省略描述中的括号以及文件扩展名;虽然如果你想要它们可以包括它们
这是另一个包含文件类型的正则表达式:
^(?<Artist>.*?)\s*-\s*(?<Title>.*?(?=\s+\(|\.))(?:\s*\((?<Description>[^)]+)\))?\.(?<FileType>\S+)
如果要包括括号和/或“点”,只需将它们移动到捕获组中
答案 1 :(得分:0)
您还需要使尾随空格可选:
(^.*)\s-\s(.*)\s(\(.*\))?
^^---
如果一首歌有评论,那么就有一个空格:
Foo - Bar (Baz).flac
^--- space
然后在哪里没有评论,没有空间:
Foo - Bar.flac
^--no space
您的正则表达式要求空间存在,因此它永远不会与无评论版本匹配。尝试
(^.*)\s-\s(.*)(\s\(.*\))?
^^^--- swap positions
代替。