расщепление строкового значения c # - PullRequest
0 голосов
/ 05 января 2010

У меня есть строковое значение и я хочу получить имя инженера только, например. в этом случае "Карл Харрисон".

"{ Engineer = CARL HARRISON, HandHeldAvailability = H, HASHHT = True, HHTSTATUS =  }"

Имена могут быть разными по длине, но всегда будут в одном формате.

Ответы [ 2 ]

6 голосов
/ 05 января 2010
string regex = @"{ Engineer = (?<Name>.*), HandHeldAvailability";

string input = "{ Engineer = CARL HARRISON, HandHeldAvailability = H, HASHHT = True, HHTSTATUS =  }";
string engineerName = "";

Match match = Regex.Match(input, regex);
if(match.Success && match.Groups["Name"] != null)
{
    engineerName = match.Groups["Name"].Value;
}

Regex позволяет вам проверить, совпадает ли входная строка (В противном случае совпадет. Ошибка будет ложной) и позволяет легко изменить ее в случае изменения формата ввода. Вы также можете легко подобрать другие части.

Редактировать: Если вы часто вызываете эту функцию (то есть в цикле), вы также можете скомпилировать регулярное выражение:

public class YourDataClass {
    private static Regex regex = new Regex(@"{ Engineer = (?<Name>.*), HandHeldAvailability", RegexOptions.Compiled);

    public string GetNameFromInput(string input) {
        var result = string.Empty;
        Match match = regex.Match(input);
        if(match.Success && match.Groups["Name"] != null)
        {
            result = match.Groups["Name"].Value;
        }
        return result;
    }
}
6 голосов
/ 05 января 2010
string name = s.Split(',')[0].Split('=')[1].Trim();

Объяснение: Split от , дает

{ Engineer = CARL HARRISON
_HandHeldAvailability = H
_HASHHT = True
_HHTSTATUS =  }

Взяв первый элемент, это дает

{ Engineer = CARL HARRISON

Split = дает:

{ Engineer_
_CARL HARRISON

Взяв второй элемент, это дает

_CARL HARRISON

так что Trim дает:

CARL HARRISON

Я заменил начальные и конечные пробелы на _, чтобы прояснить их.

...