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

本文关键字:方法 查找 字符串 安全 正则表达式 | 更新日期: 2023-09-27 18:21:51

我在谷歌上浏览了很多从证书的主题序列号中获取特殊主题的方法,实际上有些技巧很有效,但并不漂亮,我想把它翻译成正则表达式,而不是

输入参数(完整字符串)看起来像:一些文本,这里可能是额外的文本,CN=John Doe+SERIALNUMBER=XID:1234-2002-2-123413342134,O=No,C=EN

我想得到的是XID:1234-2002-2-123413342134,所以我知道im查找的子字符串以"XID:"开头,应该在","上拆分

现在我做得像,不漂亮!:

 List<string> SubjectAttributes = cert.Subject.Split(',').ToList();
                        string xid = SubjectAttributes.Where(x => x.Contains("XID:")).FirstOrDefault();
                        string resten = xid.Substring(xid.LastIndexOf('=') + 1);

regex会是什么样子,或者会有更好的方法吗?我还担心我自己的解决方案,因为会有很大一部分indexoutofbounds/nullreference异常。

干杯

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

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

XID:[0-9-]+

或者甚至具有单词边界,因为XID看起来是一个完整的单词:

'bXID:[0-9-]+

参见regex演示

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);
    }
}

您可以使用否定的char类。

XID:[^,]+

CCD_ 3匹配任何字符但不匹配CCD_ 4一次或多次。

@"'bXID:[^,]+"

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