Pour répondre à ta demande d’extraction de données à partir d’un texte en utilisant des expressions régulières (Regex), voici des solutions pour chaque point que tu as mentionné :
1 - Extraire la première ligne entière avant le saut de ligne
Pour extraire la première ligne complète, tu dois rechercher tout ce qui précède un saut de ligne. L’expression régulière suivante permet de capturer la ligne complète :
var firstLine = textContent.match(/^[^\n\r]+/);
• Explication : ^[^\n\r]+ capture tous les caractères au début du texte jusqu’à rencontrer un saut de ligne. Cette expression fonctionne même s’il y a des espaces dans la première ligne.
2 - Extraire les séquences de nombres après le mot clé “Pin” (insensible à la casse)
Pour capturer les séquences de chiffres après le mot-clé “Pin” (en majuscule, minuscule ou mélangé), voici l’expression :
var pinNumbers = textContent.match(/pin\s*#?\s*([0-9-]+)/gi);
• Explication :
• pin capture “Pin” sans se soucier des majuscules ou minuscules (i pour insensible à la casse).
• \s* gère les espaces potentiels après “Pin”.
• #? capture éventuellement un “#” après “Pin”.
• ([0-9-]+) capture une séquence de chiffres ou de tirets (comme 87945 ou 453-34).
Tu obtiendras un tableau avec les différentes occurrences de “Pin” suivies de leur séquence numérique.
3 - Extraire toutes les dates
Pour extraire toutes les dates, quel que soit leur format (YYYY/MM/DD, YYYY-MM-DD, mois jour, année), voici une expression qui couvre plusieurs formats courants de dates :
var dates = textContent.match(/(\d{4}[\/-]\d{2}[\/-]\d{2})|([A-Za-z]+ \d{1,2}, \d{4})/g);
• Explication :
• \d{4}[\/-]\d{2}[\/-]\d{2} capture les dates au format YYYY/MM/DD ou YYYY-MM-DD.
• [A-Za-z]+ \d{1,2}, \d{4} capture les dates au format Mois Jour, Année comme “April 5, 2024”.
Cette expression retournera un tableau avec toutes les dates.
4 - Extraire le montant après le mot clé “Total”
Pour extraire le nombre après le mot-clé “Total” (indifférent à la casse), voici l’expression à utiliser :
var total = textContent.match(/total\s+(\d+)/i);
• Explication :
• total\s+ capture le mot “Total” suivi d’un ou plusieurs espaces.
• (\d+) capture la séquence de chiffres qui suit immédiatement.
• i permet de rendre la recherche insensible à la casse (Total, TOTAL, total…).
Cette expression renverra la valeur correspondant à 50 et non 45, car elle recherche le mot “Total” exact avant d’extraire le nombre.
En combinant ces expressions régulières dans ton script, tu pourras extraire les données demandées de manière fiable. Voici un exemple d’implémentation complète :
function extractData(textContent) {
// 1. Extraire la première ligne avant le saut de ligne
var firstLine = textContent.match(/^[^\n\r]+/);
// 2. Extraire les séquences de chiffres après"Pin"
var pinNumbers = textContent.match(/pin\s*#?\s*([0-9-]+)/gi);
// 3. Extraire toutes les dates
var dates = textContent.match(/(\d{4}[\/-]\d{2}[\/-]\d{2})|([A-Za-z]+ \d{1,2}, \d{4})/g);
// 4. Extraire le montant après "Total"
var total = textContent.match(/total\s+(\d+)/i);
// Afficher les résultats dans la console
Logger.log('First Line: ' + firstLine);
Logger.log('Pin Numbers: ' + pinNumbers);
Logger.log('Dates: ' + dates);
Logger.log('Total: ' + (total ? total[1] : 'No total found'));
}
Cela te permet de gérer les différentes extractions de manière efficace.
Fabrice
https://atelier-informatique.com/blog/
"Ce message et toutes les pièces jointes (ci-après le "message") sont établis à l'intention exclusive de ses destinataires et sont confidentiels. Si vous recevez ce message par erreur, merci de le détruire et d'en avertir immédiatement l’expéditeur. Toute utilisation de ce message non conforme à sa destination, toute diffusionou toute publication, totale ou partielle, est interdite, sauf autorisation expresse. L'internet ne permettant pas d'assurer l'intégrité de ce message, nous déclinons toute responsabilité au titre de ce message, dans l’hypothèse où il aurait été modifié."--
You received this message because you are subscribed to a topic in the Google Groups "Google Apps Script Community" group.
To unsubscribe from this topic, visit https://groups.google.com/d/topic/google-apps-script-community/WqK788Iqino/unsubscribe.
To unsubscribe from this group and all its topics, send an email to google-apps-script-c...@googlegroups.com.
To view this discussion on the web visit https://groups.google.com/d/msgid/google-apps-script-community/2964deb8-9a16-4ccf-8123-b97a53ee0a1cn%40googlegroups.com.
Salut Stéphane !
Merci pour ton retour ! Je vois les deux petits ajustements à faire pour répondre à tes besoins.
1. Pin avec texte intermédiaire :
Si après le mot-clé “Pin”, il peut y avoir du texte avant la séquence de chiffres (par exemple, “Pin # other text 453-34”), on peut utiliser une expression régulière qui autorise la présence d’autres mots après “Pin” avant d’atteindre les chiffres. Voici comment ajuster l’expression :
var pinNumbers = textContent.match(/pin\s*#?.*?([0-9-]+)/gi);
Explication :
• .*? : Capture tous les caractères entre “Pin” et la séquence de chiffres, de manière non-gourmande (c’est-à-dire qu’il s’arrêtera dès qu’il trouvera des chiffres).
• ([0-9-]+) : Capture les chiffres avec ou sans tirets.
Cela te permettra de récupérer toutes les séquences de chiffres même s’il y a du texte intermédiaire.
2. Total sans Sous-total :
Pour éviter de capturer le montant après “Sous-total”, on peut spécifier que le mot “Total” ne doit pas être précédé de “Sous-” dans la même ligne. Voici comment modifier l’expression :
var total = textContent.match(/(?<!sous-)\btotal\s+(\d+)/i);
Explication :
• (?<!sous-) : Assure que “Total” n’est pas précédé de “Sous-” sur la même ligne.
• \b : Assure qu’on recherche le mot entier “Total” et pas une sous-chaîne d’un autre mot.
Avec cette nouvelle expression, tu devrais maintenant obtenir “50” et non “45”.
Voici la version complète avec ces ajustements :
function extractData(textContent) {
// 1. Extraire la première ligne avant le saut de ligne
var firstLine = textContent.match(/^[^\n\r]+/);
// 2. Extraire les séquences de chiffres après "Pin" même avec du texte intermédiaire
var pinNumbers = textContent.match(/pin\s*#?.*?([0-9-]+)/gi);
// 3. Extraire toutes les dates
var dates = textContent.match(/(\d{4}[\/-]\d{2}[\/-]\d{2})|([A-Za-z]+ \d{1,2}, \d{4})/g);
// 4. Extraire le montant après "Total" sans prendre le sous-total
var total = textContent.match(/(?<!sous-)\btotal\s+(\d+)/i);
// Afficher les résultats dans la console
Logger.log('First Line: ' + firstLine);
Logger.log('Pin Numbers: ' + pinNumbers);
Logger.log('Dates: ' + dates);
Logger.log('Total: ' + (total ? total[1] : 'No total found'));
}
Teste ces modifications et dis-moi si cela répond bien à tes attentes ! 😊
Fabrice
Salut Stéphane !
Merci pour ton retour ! Je vois les deux petits ajustements à faire pour répondre à tes besoins.
1. Pin avec texte intermédiaire :
Si après le mot-clé “Pin”, il peut y avoir du texte avant la séquence de chiffres (par exemple, “Pin # other text 453-34”), on peut utiliser une expression régulière qui autorise la présence d’autres mots après “Pin” avant d’atteindre les chiffres. Voici comment ajuster l’expression :
var pinNumbers = textContent.match(/pin\s*#?.*?([0-9-]+)/gi);
Explication :
• .*? : Capture tous les caractères entre “Pin” et la séquence de chiffres, de manière non-gourmande (c’est-à-dire qu’il s’arrêtera dès qu’il trouvera des chiffres).
• ([0-9-]+) : Capture les chiffres avec ou sans tirets.
Cela te permettra de récupérer toutes les séquences de chiffres même s’il y a du texte intermédiaire.
2. Total sans Sous-total :
Pour éviter de capturer le montant après “Sous-total”, on peut spécifier que le mot “Total” ne doit pas être précédé de “Sous-” dans la même ligne. Voici comment modifier l’expression :
var total = textContent.match(/(?<!sous-)\btotal\s+(\d+)/i);
Explication :
• (?<!sous-) : Assure que “Total” n’est pas précédé de “Sous-” sur la même ligne.
• \b : Assure qu’on recherche le mot entier “Total” et pas une sous-chaîne d’un autre mot.
Avec cette nouvelle expression, tu devrais maintenant obtenir “50” et non “45”.
Voici la version complète avec ces ajustements :
function extractData(textContent) {
// 1. Extraire la première ligne avant le saut de ligne
var firstLine = textContent.match(/^[^\n\r]+/);
// 2. Extraire les séquences de chiffres après "Pin" même avec du texte intermédiaire
var pinNumbers = textContent.match(/pin\s*#?.*?([0-9-]+)/gi);
// 3. Extraire toutes les dates
var dates = textContent.match(/(\d{4}[\/-]\d{2}[\/-]\d{2})|([A-Za-z]+ \d{1,2}, \d{4})/g);
// 4. Extraire le montant après "Total" sans prendre le sous-total
var total = textContent.match(/(?<!sous-)\btotal\s+(\d+)/i);
// Afficher les résultats dans la console
Logger.log('First Line: ' + firstLine);
Logger.log('Pin Numbers: ' + pinNumbers);
Logger.log('Dates: ' + dates);
Logger.log('Total: ' + (total ? total[1] : 'No total found'));
}
Teste ces modifications et dis-moi si cela répond bien à tes attentes ! 😊
Fabrice
https://atelier-informatique.com/blog/
To view this discussion on the web visit https://groups.google.com/d/msgid/google-apps-script-community/92b023b6-e0ff-4f8b-ab41-1404d11a9389n%40googlegroups.com.