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

C# 使用正则表达式或安全方法查找子字符串,c#,regex,C#,Regex,我在浏览谷歌,有很多方法可以从证书的主题序列号中找到一个特殊的主题,实际上有些黑客技术很管用,但并不漂亮,我想把它翻译成正则表达式 输入参数(完整sting)看起来像:一些文本,这里可能是附加文本,CN=johndoe+SERIALNUMBER=XID:1234-2002-2-123413342134,O=No,C=EN 我想说的是XID:1234-2002-2-123413342134,所以我知道我要找的子字符串以“XID:”开头,应该在“,”上拆分 现在我做得很不漂亮 List<st

我在浏览谷歌,有很多方法可以从证书的主题序列号中找到一个特殊的主题,实际上有些黑客技术很管用,但并不漂亮,我想把它翻译成正则表达式

输入参数(完整sting)看起来像:一些文本,这里可能是附加文本,CN=johndoe+SERIALNUMBER=XID:1234-2002-2-123413342134,O=No,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);
List SubjectAttributes=cert.Subject.Split(',').ToList();
字符串xid=SubjectAttributes.Where(x=>x.Contains(“xid:”).FirstOrDefault();
字符串resten=xid.Substring(xid.LastIndexOf('=')+1);
正则表达式看起来怎么样,或者会有更好的方法,我也担心我自己的解决方案,因为会有很大一部分indexoutofbounds/nullreference异常


Cheers

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

XID:[0-9-]+
或者即使单词边界为
XID
看起来也是一个完整的单词:

\bXID:[0-9-]+

C#:


您可以使用否定的char类

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


@”(
XID:[^,]+
版本可能达不到您的预期,因为如果逗号前有空格,可能会得到意外结果。如果您仍然认为子字符串应该在逗号之前,并且可能包含除逗号以外的任何内容,请使用
@“\bXID:[^,]+\b”
(假设XID中的最后一个字符是数字)很高兴对你有帮助,如果我的回答对你有帮助,请考虑一下投票。
XID:[^,]+
@"\bXID:[^,]+"
@"(?<==)XID:[^,]+"