2011-08-04 34 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密钥包含其他字符,请务必添加它们。我对自己的角色范围并不熟悉,所以我已经把你发布的内容放在那里。