Donc pour mon cas, je préfère éviter les regex.
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question"subject":"(.*)","body":"(.*)","ad_type"
"subject":"veut dire que la capture commence littéralement par
"subject":"
"subject":"(.*)","body":"signifie que la capture complète commence par
"subject":"et fini par
","body":"et que tout ce qui est entre les 2 sera mis dans le groupe 1.
Sub TestRegex() Dim reg As VBScript_RegExp_55.RegExp Dim Match As VBScript_RegExp_55.Match Dim Matches As VBScript_RegExp_55.MatchCollection ' instanciation Set reg = New VBScript_RegExp_55.RegExp reg.Pattern = """subject"":""(.*)"",""body"":""(.*)"",""ad_type""" Dim toutLeTexte As String toutLeTexte = LireFichierTexte("C:\Temp\Test.txt") Set Matches = reg.Execute(toutLeTexte) For Each Match In Matches Debug.Print "source >>", Match.Value For i = 0 To Match.SubMatches.Count - 1 Debug.Print "[$" & i + 1 & "]", Match.SubMatches(i) Next i Next Match End Sub Public Function LireFichierTexte(ByVal MonFichier As String) As String 'https://excel-malin.com/codes-sources-vba/vba-lire-contenu-de-fichier-texte/ On Error GoTo LireFichierTexteErreur Dim IndexFichier As Integer IndexFichier = FreeFile() Open MonFichier For Binary Access Read As #IndexFichier LireFichierTexte = Space$(LOF(IndexFichier)) Get #IndexFichier, , LireFichierTexte Close #IndexFichier Exit Function LireFichierTexteErreur: Close #IndexFichier LireFichierTexte = "" End Function
Imports System Imports System.Text.RegularExpressions Imports System.IO Module Program2 Sub Main2(args As String()) ' ","subject":" ' ","body":" ' ","ad_type":" ' ma ligne : message1","subject":"message2","body":"message3","ad_type":"message4 ' Je souhaite donc récupérer ce qu'il a entre : ,"subject":" et ","body":" ' Je souhaite donc récupérer ce qu'il a entre : ","body":" et ","ad_type":" ' En résumé, je veux récupérer message1 et message2 Dim Term1 As String = Chr(34) & "," & Chr(34) & "subject" & Chr(34) & ":" & Chr(34) Dim Term2 As String = Chr(34) & "," & Chr(34) & "body" & Chr(34) & ":" & Chr(34) Dim Term3 As String = Chr(34) & "," & Chr(34) & "ad_type" & Chr(34) & ":" & Chr(34) Dim fichiertest = "c:\users\tomce\desktop\test.txt" Dim lines() As String = IO.File.ReadAllLines(fichiertest) Dim ligne = lines(0) Console.WriteLine(ligne) Dim debut_t As Integer = ligne.IndexOf(Term1) Dim fin_t As Integer = ligne.IndexOf(Term2) Dim debut_d As Integer = ligne.IndexOf(Term2) Dim fin_d As Integer = ligne.IndexOf(Term3) Dim tr As String = Strings.Mid(ligne, debut_t + Term1.Length + 1, fin_t - debut_t - Term1.Length) Dim dc As String = Strings.Mid(ligne, debut_d + Term2.Length + 1, fin_d - debut_d - Term2.Length) Console.WriteLine(tr) Console.WriteLine(dc) System.Threading.Thread.Sleep(3000) End Sub End Module
System.Threading.Thread.Sleep(3000)
Console.ReadLine()
Imports System.IO Imports System.Text.RegularExpressions Module Module1 Sub Main() Dim fichierComplet As String = File.ReadAllText("C:\Temp\Test.txt") Dim pattern As String = """subject"":""(?<sujet>.*)"",""body"":""(?<corps>.*)"",""ad_type""" 'le moteur de regex de .Net accpete les groupes avec des noms, ici "sujet" et "corps" For Each m As Match In Regex.Matches(fichierComplet, pattern) If m.Success Then Console.WriteLine("Le sujet: {0}", m.Groups("sujet").Value) Console.WriteLine("Le corps: {0}", m.Groups("corps").Value) End If Next Console.ReadLine() End Sub End Module