c# Diviser la chaîne en utilisant une autre chaîne comme délimiteur et inclure le délimiteur dans le cadre de la chaîne divisée

Ysr

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.

Wiktor Stribew

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.

modifier le
0

laisse moi dire quelques mots

0commentaires
connexionAprès avoir participé à la revue

Articles connexes

TOP liste

  1. 1

    Créer un dictionnaire à partir d'une liste de clés et de plusieurs listes de valeurs en Python

  2. 2

    Spring Reactive: java.io.IOException: Une connexion établie a été abandonnée par le logiciel de votre machine hôte, lorsque je ferme la connexion

  3. 3

    Créer un arbre binaire à partir d'une liste de listes en Python

  4. 4

    Comment obtenir l'image actuelle dans un flux en direct avec python et opencv ?

  5. 5

    Comment puis-je ajouter une entrée utilisateur à une liste de contrôle, puis la placer dans une étiquette?

  6. 6

    Comment séparer les cartes qui se chevauchent les unes des autres en utilisant python opencv?

  7. 7

    how to convert the type of each element in a list to a list in python

  8. 8

    impossible de charger le fichier ou l'assembly 'microsoft.sqlserver.management.sdk.sfc version = 11.0.0.0

  9. 9

    Définition de la fonction de programmation Visual Studio C

  10. 10

    La méthode GET n'est pas prise en charge pour cette route. Méthodes prises en charge : POST

  11. 11

    impossible d'ouvrir un nouvel onglet dans react, ajoute localhost: 3000 sur le lien?

  12. 12

    Comment trouver efficacement les valeurs min et max des variables dans ce système de contraintes?

  13. 13

    comment créer un champ de recherche dans gridview sans utiliser le modèle de recherche

  14. 14

    Trouver l'intersection et l'union de deux rectangles

  15. 15

    Détection d'affiche dans OpenCV?

  16. 16

    Comment changer la couleur de la police dans R?

  17. 17

    comment supprimer "compte de connexion google" à des fins de développement - actions sur google

  18. 18

    comment le contrôle de tableau javascript devrait-il être

  19. 19

    Référencement des assemblys de structure .net 4.7 dans la solution .net core 2

  20. 20

    J'ai besoin de savoir si ces deux phrases sont les mêmes en programmation

  21. 21

    SignalR cesse de fonctionner après un certain temps

chaudétiquette

Archive