Как я могу использовать RegEx (или я должен), чтобы извлечь строку между начальной строкой «__» и заканчивающейся «__» или «ничего» - PullRequest
1 голос
/ 20 января 2012

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 ]

5 голосов
/ 20 января 2012

просто без RegEx это можно выразить так:

var firmware = PNP.Split(new[] {'_'}, StringSplitOptions.RemoveEmptyEntries)[1].Split('\\')[0];
0 голосов
/ 21 января 2012

Если вы хотите, чтобы 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 также соответствует подчеркиванию (_).

0 голосов
/ 21 января 2012
string s = split[1].TrimEnd('_');    
string mystring = s.Substring(s.LastIndexOf('_') + 1);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...