Przypisać zmienne z wyrażenia regularnego

głosy
3

Szukam sposobu przypisywania zmiennych z desenie w wyrażeniach regularnych z C ++ .NET coś jak

String^ speed;
String^ size;

Polecenia prędkości = [szybkość] Rozmiar = [rozmiar]

Teraz używam indexOf () i substring (), ale jest to dość brzydki

Utwórz 19/09/2008 o 02:59
źródło użytkownik
W innych językach...                            


3 odpowiedzi

głosy
3

String^ speed; String^ size;
Match m;
Regex theregex = new Regex (
  "SPEED=(?<speed>(.*?)) SIZE=(?<size>(.*?)) ",
  RegexOptions::ExplicitCapture);
m = theregex.Match (yourinputstring);
if (m.Success)
{
  if (m.Groups["speed"].Success)
    speed = m.Groups["speed"].Value;
  if (m.Groups["size"].Success)
    size = m.Groups["size"].Value;
}
else
  throw new FormatException ("Input options not recognized");

Przeprosiny za błędy składniowe, nie mam kompilatora do testu z teraz.

Odpowiedział 19/09/2008 o 03:45
źródło użytkownik

głosy
2

Jeśli dobrze rozumiem pytanie, szukasz przechwytywanie grup. Nie jestem zaznajomiony z api .net, ale w Javie to będzie wyglądać następująco:

Pattern pattern = Pattern.compile("command SPEED=(\d+) SIZE=(\d+)");
Matcher matcher = pattern.matcher(inputStr);
if (matcher.find()) {
  speed = matcher.group(1);
  size = matcher.group(2);
}

Istnieją dwie grupy przechwytywanie wyrażenia regularnego wzoru powyżej, wyznaczone przez dwa zestawy nawiasach. W Javie te muszą być odniesione przez liczby, ale w niektórych innych językach możesz odwoływać się do nich po imieniu.

Odpowiedział 19/09/2008 o 03:57
źródło użytkownik

głosy
0

Jeśli umieścisz wszystkie zmienne w klasie, można użyć refleksji iteracyjne nad jego pola, coraz ich nazwy i wartości i podłączając je na sznurku.

Biorąc pod uwagę wystąpienie pewnej klasy o nazwie InputArgs:

foreach (FieldInfo f in typeof(InputArgs).GetFields()) {
    string = Regex.replace("\\[" + f.Name + "\\]",
        f.GetValue(InputArgs).ToString());
}
Odpowiedział 19/09/2008 o 03:20
źródło użytkownik

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more