C# 如何使用RegEx(或应该)提取起始字符串'__';以'结束__';或';没有';

C# 如何使用RegEx(或应该)提取起始字符串'__';以'结束__';或';没有';,c#,regex,string,C#,Regex,String,RegEx总是把我弄糊涂 我有这样一个字符串: IDE\DiskDJ205GA20_____________________________A3VS____\5&1003ca0&0&0.0.0 IDE\DiskSJ305GA23_____________________________PG33S\6&2003Sa0&0&0.0.0 var firmware = PNP.Split(new[] {'_'}, StringSplitOpti

RegEx总是把我弄糊涂

我有这样一个字符串:

  IDE\DiskDJ205GA20_____________________________A3VS____\5&1003ca0&0&0.0.0
  IDE\DiskSJ305GA23_____________________________PG33S\6&2003Sa0&0&0.0.0
var firmware = PNP.Split(new[] {'_'}, StringSplitOptions.RemoveEmptyEntries)[1].Split('\\')[0];
或者有时像这样存储:

  IDE\DiskDJ205GA20_____________________________A3VS____\5&1003ca0&0&0.0.0
  IDE\DiskSJ305GA23_____________________________PG33S\6&2003Sa0&0&0.0.0
var firmware = PNP.Split(new[] {'_'}, StringSplitOptions.RemoveEmptyEntries)[1].Split('\\')[0];
我想要“A3VS”或“PG33S”字符串。这是我的固件,长度和类型各不相同。我曾经用过:

            string[] split = PNP.Split('\\'); //where PHP is my string name
            var start = split[1].LastIndexOf('_');
            string mystring = split[1].Substring(start + 1);
但这只适用于固件字符串后不以_uu结尾的字符串。我注意到一些在它后面有一个额外的随机“u”


正则表达式是解决这个问题的方法吗?或者没有RegEx还有更好的方法吗?它可以这样表示:

  IDE\DiskDJ205GA20_____________________________A3VS____\5&1003ca0&0&0.0.0
  IDE\DiskSJ305GA23_____________________________PG33S\6&2003Sa0&0&0.0.0
var firmware = PNP.Split(new[] {'_'}, StringSplitOptions.RemoveEmptyEntries)[1].Split('\\')[0];

如果没有正则表达式,它可以表示为:

  IDE\DiskDJ205GA20_____________________________A3VS____\5&1003ca0&0&0.0.0
  IDE\DiskSJ305GA23_____________________________PG33S\6&2003Sa0&0&0.0.0
var firmware = PNP.Split(new[] {'_'}, StringSplitOptions.RemoveEmptyEntries)[1].Split('\\')[0];

如果您希望使用RegEX方法来完成此操作,请选择:

Regex regex = new Regex(@"\\.*_+(?<firmware>[A-Za-z0-9]+)_*\\");
var m1 = regex.Match("IDE\DiskSJ305GA23_____________________________PG33S\6&2003Sa0&0&0.0.0");
var g1 = m1.Groups["firmware"].Value;
//g1 == "PG33S"
Regex-Regex=new Regex(@“\\.*\+(?[A-Za-z0-9]+)\”;
var m1=regex.Match(“IDE\DiskSJ305GA23\uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu3s6&2003Sa0&0.0.0”);
var g1=m1.组[“固件”]值;
//g1==“PG33S”

请记住,您必须在捕获子表达式中使用[A-Za-z0-9]而不是\w,因为\w还与下划线(389;)匹配。

如果您希望使用正则表达式在此处执行此操作,则它是:

Regex regex = new Regex(@"\\.*_+(?<firmware>[A-Za-z0-9]+)_*\\");
var m1 = regex.Match("IDE\DiskSJ305GA23_____________________________PG33S\6&2003Sa0&0&0.0.0");
var g1 = m1.Groups["firmware"].Value;
//g1 == "PG33S"
Regex-Regex=new Regex(@“\\.*\+(?[A-Za-z0-9]+)\”;
var m1=regex.Match(“IDE\DiskSJ305GA23\uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu3s6&2003Sa0&0.0.0”);
var g1=m1.组[“固件”]值;
//g1==“PG33S”

请记住,您必须在捕获子表达式中使用[A-Za-z0-9]而不是\w,因为\w还匹配下划线(389;)。

隐藏拆分选项!有没有理由会说“字符串的最佳重载方法匹配。Split(string[],System.StringSplitOptions)有一些无效参数”使用字符数组而不是字符串数组:input.Split(new[]{'\},StringSplitOptions.RemoveEmptyEntries)[1]。Split(new[]{'\\})[0]隐藏的拆分选项!有没有理由会说“字符串的最佳重载方法匹配。Split(string[],System.StringSplitOptions)有一些无效参数”使用字符数组而不是字符串数组:input.Split(new[]{'\},StringSplitOptions.RemoveEmptyEntries)[1]。Split(new[]{'\\})[0]谢谢!我最后也用了另一种方法!谢谢我最后也用了另一种方法!