C#提取文本文件块

C#提取文本文件块,c#,regex,C#,Regex,我需要从文件中提取公钥块。该文件如下所示: .. some more data here .. -----BEGIN PGP PUBLIC KEY BLOCK----- Version: GnuPG v2.0.17 (MingW32) Stmjb2vAyoFAt5EbfNLEPCrwIDt7gB6cS2kldF7nechuNoyEzevJQMfQ8uJChR9g h/eUqqzE/cqCLHEruLMR38NCVYTEuCvTjOCtAnU9BCyX1Ir11aDUe0A4drcNISrv

我需要从文件中提取公钥块。该文件如下所示:

..  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;
    }
但是我不能让它工作


使用regex我怎么能做到这一点呢?

我不明白你所说的
(.*)
是什么意思。它不应该是
*
-匹配任意字符,任意次数吗?同时尝试取出
\\r\\n
。我看不出正则表达式还有什么问题。

使用以下正则表达式:

-----BEGIN PGP PUBLIC KEY BLOCK-----.*([a-zA-Z0-9/]+).*-----END PGP PUBLIC KEY BLOCK-----
第一组,你应该有你的钥匙


如果PGP密钥包含其他字符,请确保添加它们。我自己不熟悉角色范围,所以我把你发布的内容放在那里。

我认为这是最简单的:

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

苏格拉底方法。如果愿意,您可以将其重新表述为“尝试将
(.*?
替换为
*
*?
*
相同,但匹配的字符数尽可能少-在这里不会引起问题