模式:
(.*?) (?:(\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解决方案。
答案 0 :(得分:1)
以下内容似乎适用于您的所有示例,替换以下匹配项:
(.*?) (\d+:)?(\d+):(\d+)
使用:
the song "$1" is $3min and $4sec
答案 1 :(得分:1)
尝试这种模式:
(?<song>[^ ]+) (?:(?:(?<h>\d+):)?(?:(?<m>\d+):))?(?<s>\d+)