REGEX匹配“ Track”,但如果后面跟两个数字则不匹配

时间:2019-06-28 19:58:55

标签: regex

我需要的是此语句的正则表达式等效项:

匹配“艺术家-专辑(年)(曲目),但前提是空格后有两位数字。

我不知道该如何/是否可以做到。我为此工作了很长时间,如果我错过了一些简单的事情,很抱歉,但是我确实在寻求帮助之前试图找到答案。这就是我取得的成就,作为非编码者,这可能是基本的事情。

这是我的情况以及我尝试过的操作:

"Artist - Album (Year) (Track 01).mp3"
"Artist - Album (Year) (Track 2).mp3"
...
"Artist - Album (Year) (Track 10).mp3"

匹配:

".*\(track   

替换:

track

这是它的作用:

track01).mp3"
track2).mp3"
...
track10).mp3"

基本上,它匹配所有以打开引号开头(包括(Track space )。)对此非常有用。请注意,在我需要保留的打开引号之前,可能有一些重要的东西。第一个引号对于比赛的开始很重要。

但是,如果我替换为 track ,则对于比赛后没有2位数字的任何行,我都会留下 track#。它们全部需要2位数字(track08,track09,track10等)。因此,我需要一种匹配“艺术家-专辑(年份)(曲目)的方法,但前提是空格后面必须有2位数字。这样,它将忽略不符合该条件的行,我可以在下一步中将其替换为 track0 ,但将空格后的位数指定为1。

我不想做的就是丢掉那些数字。我只能够匹配包含2位数字的行,但它也匹配那些2位数字并替换它们。那行不通,我需要他们!

这就是我想要的(我不介意逐步完成):

track01.mp3
track02.mp3
...
track10.mp3

请注意,我是业余爱好者。我不知道什么是肯定的超前断言,或者用什么行话来解释解决方案。请原谅我的无知,我正在尝试。

3 个答案:

答案 0 :(得分:1)

如果您选择分两次进行,则可以这样做。

通过1:

找到(?i)".*?Track[ \t]*(\d)(?!\d).*?(\.\w+).*?"
替换Track0$1$2

https://regex101.com/r/pLCog5/1

第二遍:

找到(?i)".*?Track[ \t]*(\d\d)(?!\d).*?(\.\w+).*?"
替换Track$1$2

https://regex101.com/r/wh8PmX/1

答案 1 :(得分:0)

我的猜测是,也许我们将以诸如这样的表达式开始

.*\(track\s+([0-9]{2})\)(\S+)

,我们想要的两位数边界位于该捕获组中:([0-9]{2})

DEMO

答案 2 :(得分:0)

大声笑...我提到我不知道什么是积极的前瞻性断言之后,我抬起头,发现这是我所需要的。我尝试添加(?=\d{2})并对其进行一些尝试以获得一些有用的东西。它说,在询问...墨菲定律后偶然发现了一个解决方案。

".*track.(?=\d{2})有用,但是由于我的建议,我发现.*track\s+(?=\d{2})更好,因为它捕获了多个空格字符。

感谢您的快速,非判断性的反馈。