J'ai une chaîne comme "ABCD232ERE44RR". Comment puis-je le diviser en segments séparés par des lettres / chiffres. J'ai besoin de: Segment1: ABCD Segment2: 232 Segment3: ERE Segment4: 44
Il peut y avoir n'importe quel nombre de segments. Je pense aller Regex mais je ne comprends pas comment l'écrire correctement
4 réponses
Vous pouvez le faire comme ça;
using System;
using System.Collections.Generic;
using System.Text.RegularExpressions;
public class Program
{
public static void Main()
{
var substrings = Regex.Split("ABCD232ERE44RR", @"[^A-Z0-9]+|(?<=[A-Z])(?=[0-9])|(?<=[0-9])(?=[A-Z])");
Console.WriteLine(string.Join(",",substrings));
}
}
Output : ABCD,232,ERE,44,RR
Si vous décidez de ne pas utiliser regex, vous pouvez toujours suivre la voie manuelle.
const string str = "ABCD232ERE44RR1SGGSG3333GSDGSDG";
var result = new List<StringBuilder>
{
new StringBuilder()
};
char last = str[0];
result.Last().Append(last);
bool isLastNum = Char.IsNumber(last);
for (int i = 1; i < str.Length; i++)
{
char ch = str[i];
if (!((Char.IsDigit(ch) && isLastNum) || (Char.IsLetter(ch) && !isLastNum)))
{
result.Add(new StringBuilder());
}
result.Last().Append(ch);
last = ch;
isLastNum = Char.IsDigit(ch);
}
Essayez quelque chose comme:
((A-Z)+(\d)*)+
Je suggère de penser à cela comme à la recherche de correspondances avec un motif cible plutôt que de le diviser en parties que vous voulez. La division donne une signification aux délimiteurs tandis que la correspondance donne une signification aux jetons.
Vous pouvez utiliser Regex.Matches:
Recherche dans la chaîne d'entrée spécifiée toutes les occurrences d'une expression régulière spécifiée.
var matches = Regex.Matches("ABCD232ERE44RR", "[A-Z]+|[0-9]+");
foreach (Match match in matches) {
Console.WriteLine("Found '{0}' at position {1}", match.Value, match.Index);
}
De nouvelles questions
c#
C # (prononcé "see sharp") est un langage de programmation multi-paradigme de haut niveau, typé statiquement développé par Microsoft. Le code C # cible généralement la famille d'outils et d'exécutions Microsoft .NET, notamment le .NET Framework, .NET Core et Xamarin. Utilisez cette balise pour les questions sur le code écrit en C # ou en spécification formelle de C #.