String zerlegen
-
wie kann ich folgenden string splitten:
065012345; 06761234567; 066422222222in array0[0] = "650"; array1[0] = "12345";
array0[1] = "676"; array1[1] = "1234567";
array0[2] = "664"; array1[2] = "22222222";die ersten 4 stellen sind immer eine der unten aufgelisteten:
0664
0676
0699
0650
0660
0688und die nummern werden immer mit ; getrennt!
möchte das später erweitern, dass wenn man eingibt:
Gerald; 06501234212; Spech
die namen Statt handynummern, welche in einer Datenbank gespeichert sind
ersetzt werden...wollts mal so probieren:
string num = "06769854156"; Regex reg = new Regex(@"(\d{4})(\d+)"); Match matchit = reg.Match(num); for (int i = 1; i < matchit.Groups.Count; i++) MessageBox.Show(matchit.Groups[i].Value);
aber das klappt nur für eine nummer... und nicht für 06769854156; 065012345678; 0664341231
bye
-
... Regex(@"[(0664),(0676),(0699),(0650),(0660),(0688)][0-9]+;"); // findet Telefonnummern Semikolon lässt sich dann mit den normalen Methoden des Stringobjektes rausseparieren
den eine Telefonnummer besteht immer aus mehreren Nummern Ich hab mal die möglichen Vorwahlnummern in den Regulären Ausdruck reingebaut wie dir sicherlich auffallen wird! Prüf nochmal nach das die Vorwahlnummern richtig sind!
Der reguläre Ausdruck besteht aus
HandyTelefonVorwahlNummer + HandyTelefonNummerwobei es laut deiner Problembeschreibung 6 HandyTelefonVorwahlNummern gibt
Ich hoffe ich habe Dein Posting (Problembeschreibung jetzt richtig verstanden! Ich hoffe jetzt das das Semikolon innerhalb des Regulären Ausdrucks kein Metazeichen ist sonst muss vor dieses Zeichen noch nen Slash
-
Wenn Du aber Datensätze folgender Art suchst (sihe dein Beispiel):
Gerald; 06501234212; Spech
Dann muss Dir aber klar sein das dein Kopletter regulärer Ausdruck auf diesen datensatz angepasst sein muss, um diese Zeilen in der Datei zu finden!
dan musst du um meinen Reg. Ausdruck noch Pattern für Gerald; und Spech drumrumbauenmfg
-
Wenn man mit Reg. Ausdrücken spezifische/besonder Information sucht!
Muss man dies auch in seine Reg Ausdrücken so scharf wie möglich modellieren!mfg sclearscreen
-
ich hatte mal eine coole inet seite, bei der man reguläre Ausdrücke testen konnte. Such mal im INet nach sowas, würde dir sicherlich helfen.
-
... Regex(@"[(0664),(0676),(0699),(0650),(0660),(0688)][0-9]+;"); // findet Telefonnummern Semikolon lässt sich dann mit den normalen Methoden des Stringobjektes rausseparieren
wie meinst du das? das doch nur zum prüfen der vorwahlnummer? wie trenn ich dann die einzelnen nummern?
das ; ist nur da damit man telefonnummer1 von telefonnummer2 trennt, siehe outlook emails;-)also der Name später wird durch eine Telefonnummer ersetzt...damit man halt nur Telefonnummern hat...darauf soll Regex angewand werden...
bye
-
using System; using System.Collections; using System.Collections.Specialized; using System.Text.RegularExpressions; namespace StringZerlegen { /// <summary> /// Zusammenfassung für Class1. /// </summary> class Class1 { /// <summary> /// Der Haupteinstiegspunkt für die Anwendung. /// </summary> [STAThread] static void Main(string[] args) { // // TODO: Fügen Sie hier Code hinzu, um die Anwendung zu starten // String nummern = @"065012345; 06761234567; 066422222222 "; MatchCollection matchCollection; Regex regex = new Regex(@"[(0664),(0676),(0699),(0650),(0660),(0688)][ 0-9]+;?"); // findet Telefonnummern Semikolon lässt sich dann mit den normalen Methoden des Stringobjektes rausseparieren matchCollection = regex.Matches(nummern); foreach (Match m in matchCollection) Console.WriteLine(m.Value); } } }
der knackpunkt warum zum Beispiel die Nummer 066422222222 nicht gefunden wurde ist
weil das Semikolon muss wahlweise im Regulären Ausdruck vorkommen!
Und das macht man mit dem Metazeichen ? innerhalb Regulärere Ausdrücke!mfg
-
Sorry das fiel mir erst auf nach dem ich dieses Beispiel geproggt habe!
-
Wie gesagt jetzt hast dualle Matches (Treffer) einzeln! Ich hoffe das isses und hilft Dir weiter!
happy working today
mfg sclearscreen
-
Probiers mal in deiner IDE aus bei mir funzt es dodal gut
-
hi, danke schaut gut aus;-)
ich habe:String nummern = @"06769213456; 065012345";
beim ersten m.Value ist noch ; dabei...soll ich das manuell wegschneiden? die die 0 muss auch noch weg damit ich habe:
6769213456 und 65012345bye
-
um in einen Einzelnen Match die Voranstehende 0 wegzukriegen brauchst du jetzt aber keine Regex - Objects mehr es is ja nur noch nen einzelner String!
Da haste Dann wieder die einzeln String.Methoden.
Da wären sonst Regex die brühmten Kanonen auf Spatzen.Gehören eigentlich die DataGrid-, ADO .NET- Postings zu Dir
nur halt aus Interesse diese Frage?
-
Prüf halt am Index 0 des Strings auf Zeichen '0' und bau den String dann
erst ab Index 1 auf
-
Dann kannste noch beim Letzen Index des Strings auf das '; prüfen und lässt Du dann auch weg!
Ja mach das manuell, nur um Deine Frage zu beantworten
-
hi, jo verwende Dataset und Datagrid auch...
hm warum workt das nicht so:
matchCollection[0].ToString().Remove(0, matchCollection[0].Length); foreach (Match m in matchCollection) { MessageBox.Show(m.Value); }
-
so sollt es aussehen, work aber nicht:
matchCollection[0].ToString().Remove(matchCollection[0].Length - 1, 1);
cu
-
Vorab die Methode Remove gehört zur String - Klasse!
Also in der MSDN steht zu Remove:
löscht die Anzahl der Zeichen ab einem bestimmten StartIndexRemove(StartindexabdemGelöschtWird, ANzahlderZulöschendenZeichen);
Wenn Du das 1. Zeichen löschen willst sieht das so aus!
String nummer "066666667"; nummer = nummer.Remove(0,1);
in deinem Code - Posting etwa so geändert
String nummerOhneNull; foreach (Match m in matchCollection) { nummerOhneNull = m.Value.Remove(0,1); Console.WriteLine(nummerOhneNull); }
-
Die Strings im MatchCollection sind glaube ich const und wie du löschen wolltest hättest Du wenns geklappt hätte die Komplette Telefonnummer gelöscht!!!
-
Zieh den einzelnen Match in nen String - Objekt und manipuliere dann!
Dann gehts auch probier doch mein Beispiel bei Dir aus dann wirst du es sehn,
das es so funzt.
-
String nummerOhneNullundSemikolon; foreach (Match m in matchCollection) { nummerOhneNullundSemikolon = m.Value; if(nummerOhneNullundSemikolon.StartsWith("0")) nummerOhneNullundSemikolon = nummerOhneNullundSemikolon.Remove(0,1); if(nummerOhneNullundSemikolon.EndsWith(";")) nummerOhneNullundSemikolon = nummerOhneNullundSemikolon.Remove((nummerOhneNullundSemikolon.Length - 1), 1); Console.WriteLine(nummerOhneNullundSemikolon); }