2009-10-20 6 views
1

im пытается узнать о регулярном выражении и как его использовать, торможение som logs и заполнение сом текстовыми полями с результатами.простой вопрос в Regex

, если у меня есть простая линия, как этот

Состояние порта: тро-S-02-AV1 0/23

и хочу поставить Тро-S-02-AV1 и 0/23 в переменной

все имена wold end на av1, поэтому на основе этого будет выполняться регулярное выражение.

Я так думал, чтобы попытаться получить строку tro-S-02-av1, чтобы стать значением текстового поля, но я не могу получить его правильно, как я могу это сделать.

Regex r; 
    Match m; 

    r = new Regex("$`\av1"); 
    m = r.Match("Port status: tro-S-02-av1 0/23"); 

    nodetbx.Text = m.Value; 

ответ

2

Использование групп с последующим регулярным выражениям (например, вы могли бы, вероятно, приберёмся)

Port status: (?<ID>[\d\w\-]+)\s(?<ID2>[\s\S]+) 

Даст вам две названные группы, ID1 и ID2, то вы можете заселить.

Я нашел использование названных групп легче при первом изучении регулярных выражений, чтобы вы действительно могли видеть, что происходит.

Посмотрите на nregex, чтобы помочь практике и проверить регулярные выражения.

regex r = new regex("Port status: (?<ID>[\d\w\-]+)\s(?<ID2>[\s\S]+)"); 
    matchcollection mc = r.matches(MyText); 
    foreach (match m in mc) { 
     string ID1 = m.groups("ID1"); 
     string ID2 = m.groups("ID2"); 
    } 

Где MyText либо каждая строка цикла через файл с ReadLine или весь файл, если не слишком большой.

Вы можете использовать ID1 и ID2 (переименованные в нечто значимое), чтобы заполнить текстовое поле или что-то еще.

+0

отличная помощь, этот сайт выглядит хорошо, но эта строка просто сделала его более запутанным для меня, как я могу использовать ID и ID2? – Darkmage

+0

В зависимости от того, обрабатывается ли строка за строкой или в виде пакета, вы должны прокручивать каждое соответствие в коллекции, а затем получать группу из каждого соответствия. Я не так много делаю C#, поэтому не могу написать код совершенным с верхней части головы, но ... regex r = новое регулярное выражение («REGEX»); matchcollection mc = r.matches (MyText); foreach (соответствие m в mc) { строка ID1 = m.groups ("ID1"); строка ID2 = m.groups ("ID2"); } –

+0

отличная помощь :) спасибо – Darkmage

1

Для этого конкретного элемента можно использовать Раскол строковый метод

string[] words = s.Split(' '); 

использовать 2-й и 3-й величины в ArrayList.

+0

да хорошая точка, но ее просто образец окончательного журнала - сотни строк большой, с отличной информацией – Darkmage

+0

Тогда это действительно бесполезно :) – Rickjaah

+0

Правда, этот пример будет работать с разделением строки и сломается по тем же причинам, что и пример регулярного выражения выше, это действительно зависит от того, какой диапазон возможных значений вы ожидаете увидеть - будут ли пространства всегда находиться в одном и том же месте и т. д. Если формат будет всегда таким, как указано выше, со строками, если это будет/может измениться - регулярное выражение, вероятно, лучший выбор. –