2011-08-04 73 views
1

我需要從文件中提取公鑰塊。該文件看起來像這樣:C#提取文本文件塊

.. some more data here .. 
-----BEGIN PGP PUBLIC KEY BLOCK----- 

Version: GnuPG v2.0.17 (MingW32) 

Stmjb2vAyoFAt5EbfNLEPCrwIDt7gB6cS2kldF7nechuNoyEzevJQMfQ8uJChR9g 
h/eUqqzE/cqCLHEruLMR38NCVYTEuCvTjOCtAnU9BCyX1Ir11aDUe0A4drcNISrv 
pEYjbNh4pb5sZbxKfMrx7PPUOsLH/vpMZFy/ABEBAAG0JEVsa2FydF90ZXN0XzIw 
MTEgPHN1cHBvcnRAZWxrYXJ0LnBsPokBOAQTAQIAIgUCTjaYUQIbAwYLCQgHAwIG 
... 
-----END PGP PUBLIC KEY BLOCK----- 
.. some more data here .. 

之前和其他關鍵塊有更多的信息。 繼承人是我的嘗試:

static bool GetPublicKey(Stream keyI) 
    { 
     StreamReader reader = new StreamReader(keyI); 
     string key = reader.ReadToEnd(); 
     Regex r = new Regex("(-----BEGIN PGP PUBLIC KEY BLOCK-----\\r\\n(.*?)-----END PGP PUBLIC KEY BLOCK-----\\r\\n)"); 
     Match m = r.Match(key); 
     if (m.Success) 
      return true; 
    } 

但我不能得到它的工作..

我怎麼能做到這一點與使用正則表達式?

回答

2

我覺得這是最簡單的:

var regex = new Regex(
    "-----BEGIN PGP PUBLIC KEY BLOCK-----(.*?)-----END PGP PUBLIC KEY BLOCK-----", 
    RegexOptions.Singleline); 
0

我不明白你的意思是(.*?)。它不應該只是.* - 匹配任何字符,任何次數?也可以嘗試拿出\\r\\n。我看不到任何正則表達式的錯誤。

+1

你的答案是一個問題嗎? – Bazzz

+2

蘇格拉底法。如果你喜歡,可以用'。*'替換'(。*?)'。 – Oliver

+0

對於「蘇格拉底方法」+1 +1 –

0

使用下面的正則表達式:

-----BEGIN PGP PUBLIC KEY BLOCK-----.*([a-zA-Z0-9/]+).*-----END PGP PUBLIC KEY BLOCK----- 

拍攝第一組,你應該有你的鑰匙!

如果PGP密鑰包含其他字符,請務必添加它們。我對自己的角色範圍並不熟悉,所以我已經把你發佈的內容放在那裏。