使用正则表达式或安全方式查找子字符串

时间:2015-11-14 13:16:53

标签: c# regex

我通过很多方式浏览谷歌从证书的主题序列号中获取特殊主题,实际上有些黑客可以使用,但它很不错,我想翻译它改为正则表达式

输入参数(完整刺痛)看起来像:某些文字,这里可能是附加文字,CN = John Doe + SERIALNUMBER = XID:1234-2002-2-123413342134 ,O =否, C = EN

我想要的是XID:1234-2002-2-123413342134,所以我所知道的是我要查找的子字符串以" XID开头:"并应分为','

现在我喜欢,不漂亮!:

 List<string> SubjectAttributes = cert.Subject.Split(',').ToList();

                        string xid = SubjectAttributes.Where(x => x.Contains("XID:")).FirstOrDefault();

                        string resten = xid.Substring(xid.LastIndexOf('=') + 1);

正则表达式会是什么样子,或者会有更好的方式,我也关心自己的解决方案,因为会有很多indexoutofbounds / nullreference异常。

干杯

2 个答案:

答案 0 :(得分:1)

如果您需要一个从XID:获取子字符串然后包含数字或连字符的正则表达式,您可以使用以下模式:

XID:[0-9-]+

或者甚至使用单词边界XID看起来是一个完整的单词:

\bXID:[0-9-]+

请参阅regex demo

C#:

using System;
using System.Text.RegularExpressions;
using System.Linq;
public class Test
{
    public static void Main()
    {
        var str  = "some text, here could be additional text, CN=John Doe + SERIALNUMBER=XID:1234-2002-2-123413342134, O=No, C=EN";
        var res = Regex.Match(str, @"\bXID:[0-9-]+");
        if (res.Success)
            Console.WriteLine(res.Value);
    }
}

答案 1 :(得分:0)

您可以使用否定的char类。

XID:[^,]+

[^,]+匹配任何字符,但不匹配,一次或多次。

@"\bXID:[^,]+"

@"(?<==)XID:[^,]+"