2016-03-04 88 views
0

我想还是让MP3的名称匹配空白和不空白

我目前使用此代码

string str = "onClick=\"playVideo('upload/honour-3.mp3',this)\"/> onClick=\"playVideo('upload/honor is my honor .mp3',this)\"/> onClick=\"playVideo('upload/honour-6.mp3',this)\"/> "; 
string Pattern = @"playVideo\(\'upload\/(?<mp3>\S*).mp3\'\,this\)"; 

if (Regex.IsMatch(str, Pattern)) 
{ 
    MatchCollection Matches = Regex.Matches(str, Pattern); 

    foreach (Match match in Matches) 
    { 
     string fn = match.Groups["mp3"].Value; 
     Debug.Log(match.Groups["mp3"].Value); 
    } 
} 

但\ S *匹配只喜欢

荣誉-3

荣誉-6

我不能得到 “的荣誉是我的荣幸”

我尝试了“\ S * \ S *”,但它不能正常工作

我有不确定的很多多少空字符串的

如何使用正则表达式来获得MP3的名字吗?

+0

不会''做job..If你愿意,你可以用'上传\ /(?(\ S | \ s)*)。 mp3'代替 – rock321987

回答

1

如果你不需要匹配“playVideo”和“upload”,你的regex是不必要的复杂。这其中会产生预期的结果:

@"[\w\s-]+\.mp3" 

结果:

"honour-3.mp3", 
"honor is my honor .mp3", 
"honour-6.mp3" 

如果你不想在.mp3比赛结束,则可以在正则表达式更改为@"([\w\s-]+)\.mp3",并选择第二组(第一个是整场比赛)。 。

Regex.Matches(str, @"([\w\s-]+)\.mp3").Cast<Match>().Select(m => m.Groups[1].Value).ToArray(); 

结果:

"honour-3", 
"honor is my honor ", 
"honour-6" 
+0

令人惊叹!这工作! 我是指开发者,还是没办法理解这个原理 – user5509470

+0

谢谢!这对我有很大帮助! – user5509470

+0

@ user5509470不客气 – Domysee