2012-04-23 10 views
6

Ich mag würde eine Zeichenfolge zu formatieren, wie dieseFormat Zeichenfolge mit Regex in C#

BPT4SH9R0XJ6 

In etwas sieht, die

BPT4-SH9R-0XJ6 

Der String wird immer eine Mischung aus 12 Buchstaben wie folgt aussieht und Zahlen

Jede Beratung wird sehr geschätzt, dank

+6

Gibt es einen Grund, warum Sie benötigen einen regulären Ausdruck zu benutzen? – Justin

+0

Nicht wirklich, nur gedacht, dass das ist, was normalerweise am meisten empfohlen wird –

+0

^^ zustimmen mit @Justin. Dies sieht wie eine einfache Teilzeichenfolge aus. –

Antwort

18

Versuchen Regex.Replace(input, @"(\w{4})(\w{4})(\w{4})", @"$1-$2-$3");

Regex oft verspottet wird, ist aber eine ziemlich nette Art und Weise zu tun, was du brauchst. Kann auf komplexere Anforderungen erweitert werden, die mit String-Methoden nur schwer zu erfüllen sind.

+0

Das ist genau das, was ich gesucht habe, ich weiß, dass dies mit substr etc getan werden kann, aber Zeichenfolge Verkettung wird oft komplex und ist nicht sehr lustig zu schreiben :) –

+0

gibt es eine Möglichkeit, $ 1.toLower zu sagen() o.ä? – Zanidd

+0

@Zanidd Ja, es gibt eine [Überladung von Replace()] (https://docs.microsoft.com/en-us/dotnet/api/system.text.regularexpressions.regex.replace?view=netframework-4.7.1 #System_Text_RegularExpressions_Regex_Replace_System_String_System_String_System_Text_RegularExpressions_MatchEvaluator_), mit dem Sie eine benutzerdefinierte Funktion zum Generieren der Ersetzungszeichenfolge verwenden können. – Olly

5

können Sieverwendenals Ihr Ausdruck und "$1-$2-$3" als Ihr Ersatz. Dies ist jedoch kaum eine gute Verwendung für Regexp: Sie können es viel einfacher mit Substring machen.

var res = s.Substring(0,4)+"-"+s.Substring(4,4)+"-"+s.Substring(8); 
3

Es scheint, dass eine Kombination aus String.Concat und string.Substring um alles kümmern sollte, die Sie benötigen.

4

Wenn die Regel ist, immer in drei Viererblock Zeichen aufgeteilt keine Notwendigkeit für eine reg exp:

str.Substring(0,4) + "-" + str.Substring(4,4) + "-" + str.Substring(8,4) 
+0

Whops - thanks @dasblinkenlight – MiMo

2
var str = "BPT4SH9R0XJ6"; 
    var newStr = str.Substring(0, 4) + "-" + str.Substring(4, 4) + "-" + str.Substring(8, 4); 
1

Sie möchten einen Regex erstellen? Sie könnten nur Bindestriche einfügen:

string s = "BPT4SH9R0XJ6"; 
for(int i = 4; i < s.length; i = i+5) 
    s = s.Insert(i, "-"); 

Dies würde halten Bindestriche alle 4 Zeichen, würde nicht Fehler aus, wenn der String zu kurz/lang/etc hinzufügen.

+0

Sind Sie sicher, dass der Code korrekt ist? Sie verwenden nicht die i-Variable. Außerdem ist es nicht sehr effizient, da es in jeder Iteration ein neues String-Objekt erzeugt. –

+0

@tomp, du hast recht, ich habe 1 statt i – naspinski

1
return original_string.SubString(0,4)+"-"+original_string.SubString(4,4)+"-"+original_string.SubString(8,4); 
0

Ended upp dieses

var original = "BPT4SH9R0XJ6".ToCharArray(); 

var first = new string(original, 0, 4); 
var second = new string(original, 4, 4); 
var third = new string(original, 8, 4); 
var mystring = string.Concat(first, "-", second, "-", third); 

Dank

1
string str = @"BPT4SH9R0XJ6"; 
string formattedString = string.Format("{0}-{1}-{2}", str.Substring(0, 4), str.Substring(4,4), str.Substring(8,4)); 
0

Verwendung Wenn Sie den Text garantiert auf Sie arbeitet, ist der 12-stelligen Code dann, warum Sie nicht nur verwenden Teilzeichenfolge? Warum brauchst du den Regex?

String theString = "AB12CD34EF56"; 
String theNewString = theString.Substring(0, 4) + "-" + theString.Substring(4, 4) + "-" + theString.Substring(8, 4);' 
1

Dies funktioniert mit jeder Länge von string:

  for (int i = 0; i < (int)Math.Floor((myString.Length - 1)/4d); i++) 
      { 
       myString = myString.Insert((i + 1) * 4 + i, "-"); 
      } 
Verwandte Themen