J'ai un fichier texte de forme libre (non XML) à partir duquel je voudrais analyser les lignes entre deux modèles. Voici les exemples de données
val pattern = "^<Hi>(.*)\\n" val pattern = "^<Hi>(.*)\\s*$" val pattern = "^<Hi>(.*)" val pattern = "^<Network>(.*)((\\r\\n|\\n|\\r)$)|(^(\\r\\n|\\n|\\r))|^\\s*$"
Je souhaite analyser les données entre chaque balise, c'est-à-dire et la ligne vide en une seule chaîne. De même, les données entre et la ligne vide comme une autre chaîne.
Le modèle regex que j'ai essayé jusqu'à présent n'a pas fonctionné. P >
<Hi> col1 col2 col3 1 2 3 4 5 6 helo how are <How> col1 col2 1 2 helo hi'
Est-il possible de spécifier un modèle pour la ligne vide. Toute aide est appréciée.
3 Réponses :
Vous pouvez utiliser cette expression régulière et capturer vos données du groupe1,
<[^>]+>\s*([\w\W]*?(?=\n\n|$))
] +> \ s * - Commencez à capturer la balise à l'aide de edral+> et d'espaces blancs facultatifs avec \ s * ([\ w \ W] *? - Capturez tous les caractères, y compris les retours à la ligne, de manière non gourmande (? = \ n \ n | $)) - Regard positif pour s'assurer que la correspondance s'arrête dès qu'elle voit deux nouvelles lignes ou une fin absolue de chaîne
Utilisez plutôt ceci: [^ \>] + (? = \ n {2,} | $ | \ <) .
N'oubliez pas d'utiliser l'indicateur global pour trouver toutes les correspondances.
Vous pouvez consulter l'explication ici:
Solution dans le code.
val src = io.Source.fromFile("so.txt")
"(?s)>\\s*(.+?)(?=\n\n|$)".r
.findAllMatchIn(src.mkString)
.map(_.group(1))
.mkString("->", "<-\n->", "<-")
//res0: String =
//->col1 col2 col3
//1 2 3
//4 5 6
//helo how are <-
//->col1 col2
//1 2
//helo hi'<-
src.close()
C'est un texte de forme libre. Pas un XML
Je l'ai mentionné. Merci.
Essayez de rechercher le modificateur "DOTALL" pour les expressions régulières. Essayez-le et si vous êtes bloqué, mettez à jour la question. Vous pouvez également publier le code que vous utilisez pour exécuter l'expression régulière et imprimer les résultats.
Vous pouvez essayer quelque chose comme ceci
Démo([\ s \ S] +) (? = ^ $)