Hallo,
ich habe folgendes String-Format:
string input = "Oberhausen Richtung Dortmund Zwischen AS Oberhausen-Königshardt und AS Bottrop Gefahr durch ungesicherte Unfallstelle";
Nun möchte ich daraus alles was nach "Zwischen" steht und alles was nach "und" steht bekommen.
Also in diesem Beispiel:
Ich hatte diesen Lösungsansatz, wo er alle mit "AS xxx" holt, aber beim \w nimmt er das "-" nicht mit und beim Punkt (.) nimmt er das Leerzeichen auch mit, was dann quasi der ganze Rest wäre.
MatchCollection match = Regex.Matches(input, @"AS\s\w*");
Danke im Voraus
Achtung! - Hinter dir ist ein dreiköpfiger Affe!
Hallo Powerslave,
Nun möchte ich daraus alles was nach "Zwischen" steht und alles was nach "und" steht bekommen.
das kannst du doch 1:1 in einen Pattern schreiben:
"zwischen\s+(?<habenwill>.*?)\s+und"
herbivore
Okay, schonmal gut:
nur,
a) Mit welcher Klasse krieg ich das <...> nun raus?
b) Ich möchte ja auch noch die AS nach dem "und" holen, auch noch ne Idee dazu?
Achtung! - Hinter dir ist ein dreiköpfiger Affe!
Hallo Powerslave,
zu a) Match.Groups["habenwill"]
zu b) klar, aber das solltest du als Übung nun selber machen. Noch als Tipp: $ matcht auf das Ende des Strings.
herbivore
Hi,
habs jetzt nochmal versucht aber leider nicht hinbekommen.
Könntest mir nun dennoch sagen, wie's funktioniert? 😉
Wenn ichs seh versteh ichs sicher
Achtung! - Hinter dir ist ein dreiköpfiger Affe!
Hallo Powerslave,
das ist ein Widerspruch in sich. Du hast ja den ersten Pattern gesehen. Wenn du den verstanden hättest, wüsstest du auch, wie du den zweiten Pattern erstellen kannst. Das ist ja im Prinzip das gleiche.
Du kannst gerne genauer schreiben, wo dein Problem ist, aber wir sind hier kein natürlichsprachliches Interface zur Regex-Erstellung, das einfach liefert, was du anforderst.
Testen kannst du mit dem On-the-fly Regex-Tester: Regex-Lab.
herbivore
oi's kloar damit werd ichs mal testen:
Allerdings weiß ich nicht warum man das $ Zeichen dazu braucht hm hm...
Achtung! - Hinter dir ist ein dreiköpfiger Affe!
Hallo Powerslave,
brauchen wäre auch übertrieben. Ich würde es das Klarheit wegen verwenden. Musst du aber nicht.
herbivore
Okay, habs jetzt nochmal angegangen.
Bisher soweit geschafft:
string input = "Trier - Saarbrücken Zwischen AS Eppelborn und AS Illingen Gefahr in beiden Richtungen";
string s = @"\d|Bauarbeiten|Baustelle|Gefahr|gesperrt|in beiden|linker|rechter|Tagesbaustelle|Unfall|Verkehrsbehinderung";
Match match = Regex.Match(input, @"zwischen\s+(?<Punkt1>.*?)\s+und\s+(?<Punkt2>.*)\s+(" + s + ")", RegexOptions.IgnoreCase);
Nun krieg ich bei oberen Beispiel allerdings
Punkt1 = AS Eppelborn (richtig)
Punkt2 = AS Illingen Gefahr (falsch)
heraus.
Aber warum? "Gefahr" steht doch vor "in beiden" im string s.
Achtung! - Hinter dir ist ein dreiköpfiger Affe!
Hallo Powerslave,
.* ist gierig. Verwende .*?
herbivore
ok, ist ja spitze!
Aber was genau bedeutet das nun?
"(?<Punkt>.*?)"
Mich irritieren vor allem die Fragezeichen am Anfang und am Ende 😉
Achtung! - Hinter dir ist ein dreiköpfiger Affe!
Hallo Powerslave,
schlage die Bedeutung der Zeichen bzw. Zeichenkombinationen in der :rtfm: Doku nach. Für eine Übersicht kannst du auch im Regex-Lab F1 drücken.
herbivore
Ein Fragezeichen steht für "kein Mal oder genau einmal", aber ich dachte nur, wenn man es hinter einen Ausdruck schreibt.
hier steht es ja aber direkt nach der Klammer
Achtung! - Hinter dir ist ein dreiköpfiger Affe!
Hallo Powerslave,
das Fragezeichen kann mehrere Bedeutungen haben, je nachdem, wo es steht. Die stehen aber alle in der :rtfm: Doku und auch in der Hilfe von Regex-Lab. Bitte nutze diese Möglichkeiten.
herbivore
So ich nutzt mal einen schon bestehenden Thread da der Tital ja so undefiniert ist!
Ich versuche mich grad ebenfalls an RegEx... die Theorie ist mir auch ganz klar...
hab mir www.regenechsen.de durchgelsen und mir den On-the-Fly RegEx-Tester runtergeladen und siehe da es haut hin...
wenn ich es aber ins VS eingebe sagt er mir ununterbrochen
"Nicht erkannte Escapesequent" und das obwohl das RegEx nicht aufwendig ist 🙁
string match = Regex.Match(Hands[0].ToString(), "\d{10,15}").ToString();
Wie gesagt mit dem Tester haut es hin... nur jetzt sagt er mir immer beim ersten
zeichen hinterm Backslash das es sich eben um eine "Nicht erkanntes Escapesequent"
handelt und das nach JEDEM Backslash...
Weiß jmd, zufällig woran das liegt?
[EDIT]
Hab dem RegEx nun ein @ vorangestellt und es funktioniert! Nur versteh ich offen
gesagt nicht so ganz wieso...
Lieben Gruß und Frohe Weihnachten, TT
Hallo TheTwin,
Hab dem RegEx nun ein @ vorangestellt und es funktioniert! Nur versteh ich offen gesagt nicht so ganz wieso... [FAQ] Was bedeutet das @ (=at) vor String-Literalen?
herbivore