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是解决这个问题的方法吗?还是有另一种方式更好
答案 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也匹配下划线(_)。