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
Reguläre Ausdrücke (Regex) helfen Dir da bestimmt weiter.
grüße Olli
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...
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.
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);
}
Ich würde als Regex folgenden nehmen:
(?<=Ecu_Name\(S:)[^)]*
(?≤Ecu_Name(S:) ist ein positiver Lookbehind:
([^)]*){blue} 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;
}
Hallo jofenchel,
dein aktuelles Problem ist doch sehr ähnlich zu deinem in Negierte Zeichen .
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
Original von herbivore
Dann ist es wohl noch nicht angekommen 🙂 schelmischguckherbivore
LOL
Früher war ich unentschlossen, heute bin ich mir da nicht mehr so sicher...
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
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
Hallo jofenchel,
nein, mit 1 bekommst du den Inhalt des ersten Klammerpaars. Sowas steht aber auch in der Doku.
herbivore
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