Willkommen auf myCSharp.de! Anmelden | kostenlos registrieren
 | Suche | FAQ

Hauptmenü
myCSharp.de
» Startseite
» Forum
» Suche
» Regeln
» Wie poste ich richtig?

Mitglieder
» Liste / Suche
» Wer ist online?

Ressourcen
» FAQ
» Artikel
» C#-Snippets
» Jobbörse
» Microsoft Docs

Team
» Kontakt
» Cookies
» Spenden
» Datenschutz
» Impressum

  • »
  • Community
  • |
  • Diskussionsforum
Problem mit Substring
jofenchel
myCSharp.de - Member

Avatar #avatar-1735.gif


Dabei seit:
Beiträge: 117
Herkunft: 75389 Neuweiler

Themenstarter:

Problem mit Substring

beantworten | zitieren | melden

Hallo zusammen,

ich muss aus einem String den Namen eines Steuergeraetes extrahieren.
Ich bin an den Infos interessiert die nach S kommen.
Also z. B. SAMH164 oder KL164 oder KIXAGW164.

Hier ein paar solcher String:

Ecu_Name(S:KL164);
Ecu_Name(S:KIXAGW164);
Ecu_Name(S:SAMH164);

Ich habe mir den Substring angeschaut und komme da nicht sehr weit.
Zu unflexibel.

Ich wollte urspruenglich mit String.Remove zum Ende des Strings springen und das irgenwie schauen das ich die Zeichen ");" entfernen kann.

Aber ehrlich ich habe nichs in MSDN gefunden.

JoFenchel
private Nachricht | Beiträge des Benutzers
Altstetter
myCSharp.de - Member



Dabei seit:
Beiträge: 57

beantworten | zitieren | melden

Reguläre Ausdrücke (Regex) helfen Dir da bestimmt weiter.

grüße Olli
private Nachricht | Beiträge des Benutzers
Programmierhans
myCSharp.de - Experte

Avatar #avatar-1651.gif


Dabei seit:
Beiträge: 4.221
Herkunft: Zentralschweiz

beantworten | zitieren | melden

string.IndexOf in Kombination mit string.Substring müsste auch gehen
Früher war ich unentschlossen, heute bin ich mir da nicht mehr so sicher...
private Nachricht | Beiträge des Benutzers
Friedel
myCSharp.de - Member

Avatar #avatar-1931.jpg


Dabei seit:
Beiträge: 830
Herkunft: Nähe Kassel / Hessen

beantworten | zitieren | melden

Hallo zusammen,

wenn die Strings immer so aufgebaut sind, wie wäre es dann hiermit :


string[] strA = str.Split(new char[]{':',')'},3);
System.Windows.Forms.MessageBox.Show(strA[1]);

Gruss
Friedel
Ohne Ziel ist auch der Weg egal.
private Nachricht | Beiträge des Benutzers
.unreal
myCSharp.de - Member

Avatar #avatar-1903.gif


Dabei seit:
Beiträge: 563
Herkunft: Nähe Zürich

beantworten | zitieren | melden

ne scheisse hingeschrieben, sry --> delete
private Nachricht | Beiträge des Benutzers
pumi
myCSharp.de - Member



Dabei seit:
Beiträge: 96
Herkunft: Baden-Württemberg

beantworten | zitieren | melden

Hallo,

habe auch eine Lösung mit RegEx, da ich das demnächst
in ähnlicher Form auch brauchen werde.:


private string GetExpressionGroupStr(string MatchText, string Expression, int GroupIndex)
{
	Regex re = new Regex(Expression);
	Match reMatch = re.Match(MatchText);
	return reMatch.Groups[GroupIndex].Value;
}
private void button1_Click(object sender, System.EventArgs e)
{
	string str = "Ecu_Name(S:SAMH164);";
	string res = GetExpressionGroupStr(str ,"^.*:(.*)\\)",1);
	MessageBox.Show(res);
}
private Nachricht | Beiträge des Benutzers
Pulpapex
myCSharp.de - Member



Dabei seit:
Beiträge: 939
Herkunft: Rostock

beantworten | zitieren | melden

Ich würde als Regex folgenden nehmen:
(?≤Ecu_Name\(S:)[^)]*
(?≤Ecu_Name\(S:) ist ein positiver Lookbehind:
- eine Gruppe, die auf "Ecu_Name(S:" matcht, die aber nicht im Ergebnis auftaucht.

[^)]* greift sich alles, was keine "runde Klammer zu" ist.

Die Matches des Regex sind genau die Strings, die du haben möchtest. Also "SAMH164", "KL164" und "KIXAGW164".

private static Regex ecuNameRegex = new Regex(
   @"(?≤Ecu_Name\\(S:)[^)]*", 
   RegexOptions.Compiled);

private List GetEcuNames(string text) {
   List ecuNames = new ArrayList();
   foreach(Match m in ecuNameRegex.Matches(text)) {
      ecuNames.Add(m.Value);
   }
   return ecuNames;
}
private Nachricht | Beiträge des Benutzers
herbivore
myCSharp.de - Experte

Avatar #avatar-2627.gif


Dabei seit:
Beiträge: 49.486
Herkunft: Berlin

beantworten | zitieren | melden

Hallo jofenchel,

dein aktuelles Problem ist doch sehr ähnlich zu deinem in Negierte Zeichen .
Zitat
Ich habe mir vor zwei Tagen das Buch [Reguläre Ausdrücke] von O'Reilley bestellt.
Dann ist es wohl noch nicht angekommen :-) *schelmischguck*

herbivore
private Nachricht | Beiträge des Benutzers
Programmierhans
myCSharp.de - Experte

Avatar #avatar-1651.gif


Dabei seit:
Beiträge: 4.221
Herkunft: Zentralschweiz

beantworten | zitieren | melden

Zitat
Original von herbivore
Dann ist es wohl noch nicht angekommen :-) *schelmischguck*

herbivore

LOL
Früher war ich unentschlossen, heute bin ich mir da nicht mehr so sicher...
private Nachricht | Beiträge des Benutzers
jofenchel
myCSharp.de - Member

Avatar #avatar-1735.gif


Dabei seit:
Beiträge: 117
Herkunft: 75389 Neuweiler

Themenstarter:

Buch bestellt

beantworten | zitieren | melden

Hallo Herbivore und Programmierhans,

das Buch ist angekommen.
Aber ich bin ehrlich und habe noch nicht viel darin gelesen.
Ich kaempfe gerade mit C#.

JoFenchel
private Nachricht | Beiträge des Benutzers
jofenchel
myCSharp.de - Member

Avatar #avatar-1735.gif


Dabei seit:
Beiträge: 117
Herkunft: 75389 Neuweiler

Themenstarter:

beantworten | zitieren | melden

Hallo Pulpapex,

der Regex funktioniert.

Hallo Pumi,

der Regex hat bei mir nicht geklappt.
Aber eine Frage zum GroupIndex.
Mit 1 willst du nur das erste Vorkommen bei mehreren Treffern?
Ist das so richtig?

Gruss
JoFenchel
private Nachricht | Beiträge des Benutzers
herbivore
myCSharp.de - Experte

Avatar #avatar-2627.gif


Dabei seit:
Beiträge: 49.486
Herkunft: Berlin

beantworten | zitieren | melden

Hallo jofenchel,

nein, mit 1 bekommst du den Inhalt des ersten Klammerpaars. Sowas steht aber auch in der Doku.

herbivore
private Nachricht | Beiträge des Benutzers
pumi
myCSharp.de - Member



Dabei seit:
Beiträge: 96
Herkunft: Baden-Württemberg

beantworten | zitieren | melden

Hallo jofenchel,

die RegEx geht nicht, weil irgend jemand hier
dir Backslashes schluckt.
Wenn du vor dem String ein @ machst, dann geht es.

Die Funktion gibt dir die Matchings auf die Klammerpaare.
Bei Suche nach 12 würde (1)(2) folgendes geben:
Gruppe0:12
Gruppe1:1
Gruppe2:2

Gruesse pumi
private Nachricht | Beiträge des Benutzers