J'ai besoin de diviser une chaîne d'entrée en utilisant c# regex. besoin de savoir comment inclure le contenu du délimiteur dans la sortie comme indiqué ci-dessous.
contribution:
string content="heading1: contents with respect to heading1 heading2: heading2 contents heading3: heading 3 related contents sample strings";
string[] delimters = new string[] {"heading1:","heading2:","heading3:"};
Production attendue:
outputArray[0] = heading1: contents with respect to heading1
outputArray[1] = heading2: heading2 contents
outputArray[2] = heading3: heading 3 related contents sample strings
Ce que j'ai essayé :
var result = content.Split(delimters,StringSplitOptions.RemoveEmptyEntries);
Sortie que j'ai :
result [0]: " contents with respect to heading1 "
result [1]: " heading2 contents "
result [2]: " heading 3 related contents sample strings"
Je n'ai pas trouvé d'API dans string.split ou dans Regex à diviser comme résultat attendu.
Vous pouvez utiliser une solution basée sur l'anticipation positive :
var result = Regex.Split(content, $@"(?={string.Join("|", delimiters.Select(m => Regex.Escape(m)))})")
.Where(x => !string.IsNullOrEmpty(x))
Voir la démo C# :
var content="heading1: contents with respect to heading1 heading2: heading2 contents heading3: heading 3 related contents sample strings";
var delimiters = new string[] {"heading1:","heading2:","heading3:"};
Console.WriteLine(
string.Join("\n",
Regex.Split(content, $@"(?={string.Join("|", delimiters.Select(m => Regex.Escape(m)))})")
.Where(x => !string.IsNullOrEmpty(x))
)
);
Production:
heading1: contents with respect to heading1
heading2: heading2 contents
heading3: heading 3 related contents sample strings
Le (?={string.Join("|", delimiters.Select(m => Regex.Escape(m)))})
va construire une regex dynamiquement, cela ressemblera à
(?=heading1:|heading2:|heading3:)
Voir la démo regex . Le modèle correspondra essentiellement à n'importe quelle position dans la chaîne qui est suivie de herring1:
, herring2:
ou herring3:
sans consommer ces sous-chaînes, de sorte qu'elles atterriront dans la sortie.
Notez que delimiters.Select(m => Regex.Escape(m))
c'est là pour s'assurer que tous les métacaractères regex spéciaux qui pourraient être dans les délimiteurs sont échappés et traités comme des caractères littéraux par le moteur regex.
Cet article est collecté sur Internet, veuillez indiquer la source lors de la réimpression.
En cas d'infraction, veuillez [email protected] Supprimer.
laisse moi dire quelques mots