2015-04-23 2 views
0

Учитывая введенные пользователем строка:Эффективный способ разметить условно

«мэйнфреймы/PL/SQL; Программное обеспечение управления Тестирование/PL/SQL/проект /»

Что бы хороший способ разметить строки такой что «/» сохраняется, если он является частью «PL/SQL», но не иначе, давая токены:

«Мейнфреймы», «pl/sql», «Тестирование программного обеспечения», «PL/SQL», Управление проектами "

Это связано с тем, что пользователи могут случайно ввести символ '/' в качестве разделителя.

ответ

1

Если порядок маркеров не важно то что-то подобное может работать:

public IEnumerable<string> Tokenise() 
{ 
    var input = "Mainframes/pl/ sql; Software Testing/PL/SQL/Project management/"; 
    var results = new List<string>(); 

    foreach (Match match in Regex.Matches(input, @"pl\s*/\s*sql", RegexOptions.IgnoreCase)) 
    { 
     results.Add(match.Value); 
    } 

    input = Regex.Replace(input, @"pl\s*/\s*sql", string.Empty, RegexOptions.IgnoreCase); 

    results.AddRange(input.Split(new []{'/'}, StringSplitOptions.RemoveEmptyEntries)); 

    return results; 
} 

Это начинается с поиска для PL/SQL лексем (с учетом различий в пробельных и капитализации), затем раздевает их из входной строки и выполняет простую разбивку на оставшиеся символы «/». Недостатком является то, что порядок жетонов будет отличаться от строки ввода.

Смежные вопросы