2011-02-28 32 views
0

我有以下文字:如何在C#中使用正則表達式解析出作者信息?

BATTLE HYMN OF THE TIGER MOTHER, by Amy Chua. (Penguin 
Press, $25.95.) A Chinese-American mother makes a case for strict 
and demanding parenting 

我想使用正則表達式解析出:

Title 
Author 
Publisher 
MSRP (Retail Price) 
Description 

我怎樣寫一個正則表達式在C#這樣做嗎?

+1

你能提供你想要的正則表達式匹配的樣本輸入和輸出嗎?你需要捕捉任何東西嗎? – Jeff 2011-02-28 22:13:08

+3

'(?這沒有任何意義).'應該可以工作。 – Mehrdad 2011-02-28 22:13:12

+0

你想要一個正則表達式*,它會做什麼?*你希望將標題,作者,出版者,價格和摘要作爲單獨的字段來捕獲嗎?那麼請說吧。 – 2011-02-28 22:13:41

回答

3

剛纔看到答案再次被允許。這是我推薦的正則表達式:

^(?<title>[\w\s]*), by (?<author>[\w\s]*)\. \((?<publisher>[\w\s]*), (?<msrp>.*)\.\) (?<description>.*)$ 

它會給你一個名爲拍攝的上述領域,可以在C#中使用這樣的:

private void Main() 
    { 
     string input = "BATTLE HYMN OF THE TIGER MOTHER, by Amy Chua. (Penguin Press, $25.95.) A Chinese-American mother makes a case for strict and demanding parenting"; 

     string pattern = @"^(?<title>[\w\s]*), by (?<author>[\w\s]*)\. \((?<publisher>[\w\s]*), (?<msrp>.*)\.\) (?<description>.*)$"; 

     MatchCollection myMatchCollection = Regex.Matches(input, pattern); 

     foreach (Match myMatch in myMatchCollection) 
     { 
      var title = myMatch.Groups["title"]; 
      var author = myMatch.Groups["author"]; 
      var publisher = myMatch.Groups["publisher"]; 
      var msrp = myMatch.Groups["msrp"]; 
      var description = myMatch.Groups["description"]; 
     } 
    } 
+0

謝謝.....這幫助了我在我q中提到的模式....我會嘗試其他模式 – 2011-03-01 14:29:55

+0

這是工作正常,但失敗此字符串模式** TICK TOCK,由詹姆斯帕特森和邁克爾Ledwidge。 (Little,Brown,27.99美元)紐約偵探邁克爾貝內特利用前同事的幫助解決了一系列令城市陷入混亂的可怕罪行。 **因爲發佈商中有一個逗號:( – 2011-03-02 16:52:20

+0

我會修改這部分:\((?? [\ w \ s] *),(?。*)\。\)爲:\((? [\ w \ s,] *),\ $(?。*)\。\) – 2011-03-02 21:27:33

0

我想這可能是簡單的:

  • 拆分的「(」或「)」
  • 拆分的「通過」的左半部分
  • 分割上「」中產部分
  • 右邊是你的描述

使用string.Split()方法。

這一切當然取決於模式的可靠程度 - 正如上述評論者所說的那樣。

0

該做的:

^([ \w]+), by ([ \w]+). \(([ \w]+), ([$.\d]+)\) ([ \w-]+)$ 

您可以添加命名組以將其按名稱或按索引匹配。但是,除非源數據非常嚴格,否則這很可能會非常脆弱。

我也只對這個例子做了說明,其中有一個-,它是名稱中特殊字符的一個例子,因此您可能希望確保按照您的預期處理它們。