如何使用RegEx(或我应该)在起始字符串'__'和以'__'或'nothing'结尾之间提取字符串

时间:2012-01-20 19:54:44

标签: c# regex string

RegEx一直困惑我。

我有一个这样的字符串:

  IDE\DiskDJ205GA20_____________________________A3VS____\5&1003ca0&0&0.0.0

或有时像这样存储:

  IDE\DiskSJ305GA23_____________________________PG33S\6&2003Sa0&0&0.0.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);

但这仅适用于固件字符串后不以__结尾的字符串。我注意到有些人在它之后还有一个随机的“ _ ”。

RegEx是解决这个问题的方法吗?还是有另一种方式更好

3 个答案:

答案 0 :(得分:5)

只是没有RegEx它可以这样表达:

var firmware = PNP.Split(new[] {'_'}, StringSplitOptions.RemoveEmptyEntries)[1].Split('\\')[0];

答案 1 :(得分:0)

string s = split[1].TrimEnd('_');    
string mystring = s.Substring(s.LastIndexOf('_') + 1);

答案 2 :(得分: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"

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