当h和m是可选的时,正则表达式获得歌曲h:m:s

时间:2013-06-18 23:27:43

标签: regex

模式:

(.*?) (?:(\d+)\:)??(?:(\d+)\:)??(\d+)

输入

song1.mp3 2:35
song2.mp3 1:2:45
song3.mp3 45

替换:

the song "$1" is $3min and $4sec

我想要的结果

the song "song1.mp3" is 2min and 35sec
the song "song2.mp3" is 2min and 45sec
the song "song3.mp3" is min and 45sec

会发生什么事情是分钟部分试图不发生,并且出于某种原因,在空格发生之前最左边的非同意模式(.*?)而不是最右边的非同意模式((?:(\d+)\:)??)。

这似乎很奇怪。我在使用flash的http://gskinner.com/RegExr/和使用JS

http://regexpal.com/中尝试过

我可以在最后使用$修复它,但如果我不想匹配结束怎么办? .*$打破了它。

我主要关心.NET和JS解决方案。

2 个答案:

答案 0 :(得分:1)

以下内容似乎适用于您的所有示例,替换以下匹配项:

(.*?) (\d+:)?(\d+):(\d+)

使用:

the song "$1" is $3min and $4sec

答案 1 :(得分:1)

尝试这种模式:

(?<song>[^ ]+) (?:(?:(?<h>\d+):)?(?:(?<m>\d+):))?(?<s>\d+)