我需要从文件中提取公钥块。该文件如下所示:
.. 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;
}
但我无法让它发挥作用..
我怎样才能使用正则表达式?
答案 0 :(得分:2)
我认为这是最简单的:
var regex = new Regex(
"-----BEGIN PGP PUBLIC KEY BLOCK-----(.*?)-----END PGP PUBLIC KEY BLOCK-----",
RegexOptions.Singleline);
答案 1 :(得分:0)
我不明白你的意思(.*?)
。不应该只是.*
- 匹配任何字符,任何次数?同时尝试取出\\r\\n
。我看不出正则表达式有什么问题。
答案 2 :(得分:0)
使用以下正则表达式:
-----BEGIN PGP PUBLIC KEY BLOCK-----.*([a-zA-Z0-9/]+).*-----END PGP PUBLIC KEY BLOCK-----
拿第一组,你应该拿到钥匙!
如果PGP密钥包含其他字符,请务必添加它们。我自己并不熟悉角色系列,所以我已经把你发布的内容放在那里。