Entwickler-Ecke

Basistechnologien - Regex Problem


Joe.Black - Di 30.09.14 15:50
Titel: Regex Problem
Hallo Leute,

Ich habe ein kleines Problem, ich hoffe ihr könnt mir helfen.

Ich habe einen Eingangsstring in dem mehrere(beliebig viele) DatumZeit-Angaben (2016-08-2212:05:00) vorkommen können.

C#-Quelltext
1:
string eingang = "asd:sdfsdgf-abc2016-08-2212:05:00xyzabc2015-08-2212:05:00xyzabc2014-08-2212:05:00xy-sdf:z";                    

Ich müsste eigentlich nur die "-" und ":" Zeichen aus den Datumsangaben herausbekommen,
(2016-08-2212:05:00 --> 20160822120500)
aber eben nur aus denen. Frei stehende Doppelpunkte und Bindestriche müssten bleiben.
So das der String am Ende so aussieht.

C#-Quelltext
1:
string ausgang = "asd:sdfsdgf-abc20160822120500xyzabc20150822120500xyzabc20140822120500xy-sdf:z";                    

Ich komme leider nicht mehr weiter und leider komme ich nicht darum herum.

Hoffe ihr könnt mir helfen.

MfG

Moderiert von user profile iconTh69: Titel geändert: original "Blödes C# - Regex Problem, bitte um Hilfe"
Moderiert von user profile iconTh69: C#-Tags hinzugefügt
Moderiert von user profile iconTh69: Topic aus C# - Die Sprache verschoben am Di 30.09.2014 um 17:02


papa69 - Di 30.09.14 16:08

hi,

als Lösungsansatz: splitte den string bis zu der Stelle, wo er unverändert bleiben soll, den "rest" dann per regex "säubern" und schlussendlich den string wieder zusammenfügen


Marc. - Di 30.09.14 17:55

Ich habe leider gerade in VS zur Hand, aber hier wird das Ersetzen schön erklärt: http://msdn.microsoft.com/de-de/library/ewy2t5e0%28v=vs.110%29.aspx:

C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
using System;
using System.Text.RegularExpressions;

public class Example
{
   public static void Main()
   {
      string pattern = @"\p{Sc}*(\s?\d+[.,]?\d*)\p{Sc}*";
      string replacement = "$1";
      string input = "$16.32 12.19 £16.29 €18.29  €18,29";
      string result = Regex.Replace(input, pattern, replacement);
      Console.WriteLine(result);
   }
}
// The example displays the following output:
//       16.32 12.19 16.29 18.29  18,29


Das schwierigste ist wohl das Pattern. Wenn es nicht darum geht das Datum und die Uhrzeit zu valdieren, könnte das schon ausreichen: \d{4}(-)\d{2}(-)\d{4}(:)\d{2}(:)\d{2} mit vier Gruppen. Du kannst das RegEx-Pattern auch auf http://regex101.com/r/xG8fD3/1 testen. ;)


Joe.Black - Mi 01.10.14 14:21

Ich danke euch für die schnelle Hilfe.

Dank euch konnte ich es jetzt lösen.
Das war genau der Gedankenansatz der mir gefehlt hat.

Nochmals Danke schön.

MfG


PS.: Ja die Seite für die Regex-Geschichte ist gut. Hab gleich mal den Link gespeichert.