2014-01-06 76 views
2

我試圖從新聞文章中提取標題。問題是新聞網站通常會在標題中添加連字符和公司名稱,所以我試圖製作一個正則表達式來匹配空格,連字符,空格及其後的所有內容。例如:使用正則表達式匹配連字符後的所有內容

'Minecraft - Xbox 360 Edition' future mash up packs and Xbox One updates posted - National Video Game News

比賽

- National Video Game News

我想讓它只有當一切都包含最多4個字後後的正則表達式匹配的空間+連字符+空間和一切以大寫字母開頭。我試圖使用負先行排除與小寫開頭的單詞:

\s-\s(?!([a-z]+\s){3,}[a-z]+).*

但它的空間,第一個連字符及其之後的所有比賽:

- Xbox 360 Edition' future mash up packs and Xbox One updates posted - National Video Game News

我不知道在這裏做什麼,有人可以幫忙嗎?

回答

1

而不是使用正則表達式,只需使用字符串操作的方法來找到最後連字符,並從那裏提取它:

string title = "'Minecraft - Xbox 360 Edition' future mash up packs and Xbox One updates posted - National Video Game News"; 
string name = title.Substring(title.LastIndexOf("-") + 1).Trim(); 

Console.WriteLine(name); // "National Video Game News" 
4

爲什麼不把它寫不排除模式以正常的方式?

\s-(\s[A-Z][a-z]+){0,4}$ 
+0

謝謝你,我最不善於用正則表達式。 – user2517599

-1

試試這個:

(?<Title>'[\w\s-\s\w]+')(?<Name>[\w\s]+)-(?<Publisher>[\s\w]+) 

編輯:是的,不是你所期待的。這會工作,還是在某些標題中沒有?

 var text = new[] 
     { 
      @"'Minecraft - Xbox 360 Edition' future mash up packs and Xbox One updates posted - National Game News", 
      @"'Minecraft - Xbox 360 Edition' future mash up packs and Xbox One updates posted", 
      @"'Minecraft Xbox 360 Edition' future mash up packs and Xbox One updates posted" 
     }; 

     var regex = new Regex ("(?<Title>'[\\w\\s-]*')(?<Name>[\\w\\s]+)[-]*(?<Publisher>[\\s\\w]*)"); 

     foreach (var t in text) 
     { 
      var matches = regex.Matches (t); 

      foreach (Match match in matches) 
      { 
       Console.WriteLine ("Title:\t\t{0}", match.Groups ["Title"].Value.Trim()); 
       Console.WriteLine ("Name:\t\t{0}", match.Groups ["Name"].Value.Trim()); 
       Console.WriteLine ("Publisher:\t{0}", match.Groups ["Publisher"].Value.Trim()); 
       Console.WriteLine(); 
      } 
     } 

輸出爲3名不同的字符串:

Title:  'Minecraft - Xbox 360 Edition' 
Name:  future mash up packs and Xbox One updates posted 
Publisher: National Game News 

Title:  'Minecraft - Xbox 360 Edition' 
Name:  future mash up packs and Xbox One updates posted 
Publisher: 

Title:  'Minecraft Xbox 360 Edition' 
Name:  future mash up packs and Xbox One updates posted 
Publisher: 
相關問題