使用正则表达式或安全的方法查找子字符串
本文关键字:方法 查找 字符串 安全 正则表达式 | 更新日期: 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:[^,]+"