2012-04-23 29 views
6

me gustaría dar formato a una cadena que tiene este aspectoformato de cadenas con expresiones regulares en C#

BPT4SH9R0XJ6 

en algo que se parece a esto

BPT4-SH9R-0XJ6 

La cadena siempre será una mezcla de 12 letras y números

Cualquier consejo será muy apreciada, gracias

+6

¿Hay alguna razón tiene que utilizar una expresión regular? – Justin

+0

En realidad, no creo que sea lo que más se recomienda –

+0

^^ de acuerdo con @Justin. Esto parece una subcadena simple. –

Respuesta

18

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

expresión regular es a menudo ridiculizado, pero es una manera bastante ordenada de hacer Que necesitas. Se puede extender a requisitos más complejos que son difíciles de cumplir usando métodos de cadena.

+0

Eso es exactamente lo que estaba buscando, sé que esto se puede hacer con substr, etc. pero la concatenación de cadenas a menudo se vuelve compleja y tampoco es muy divertido escribir :) –

+0

¿Hay alguna manera de decir $ 1.toLower?() ¿o similar? – Zanidd

+0

@Zanidd Sí, hay una [sobrecarga de Reemplazar()] (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_) que le permite usar una función personalizada para generar la cadena de reemplazo. – Olly

5

puede usar "(.{4})(.{4})(.{4})" como su expresión y "$1-$2-$3" como su reemplazo. Sin embargo, este no es un buen uso para regexp: puede hacerlo mucho más fácilmente con Substring.

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

Parecería que una combinación de String.Concat y string.Substring debe hacerse cargo de todo lo que necesita.

4

Si la regla es siempre dividido en tres bloques de cuatro caracteres sin necesidad de una exp reg:

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

Whops - gracias @dasblinkenlight – MiMo

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

¿Alguna razón por la que desea hacer una expresión regular? usted podría insertar guiones:

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

Así, sería posible añadir guiones cada 4 caracteres, no sería error si la cadena era demasiado corta/larga/etc.

+0

¿Estás seguro de que el código es correcto? No estás usando la variable i. Además, no es muy eficiente ya que crea un nuevo objeto de cadena en cada iteración. –

+0

@tomp, tienes razón, puse 1 en lugar de i – naspinski

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

UPP terminar mediante esta

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); 

Gracias

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

Si se le garantiza el texto que está operando en El código de 12 caracteres a continuación, ¿por qué no sólo tiene que utilizar substring? ¿Por qué necesitas el Regex?

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

Esto funciona con cualquier longitud de cadena:

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