Aller au contenu


Photo

[Résolu] RegEx

RegEx

  • Please log in to reply
11 réponses à ce sujet

#1 iLandes

iLandes

    Torréfacteur de fèves

  • Membre
  • PipPipPipPipPip
  • 849 messages
  • LocationLandes

Posté 30 août 2017 - 14:00

Bonjour,

 

Je cherche à enlever des balises avec Regex mais ça ne marche pas 

 

J'ai récupéré cela:

extension String {
    
    mutating func stringByRemovingRegexMatches(pattern: String, replaceWith: String = "") {
        do {
            let regex = try NSRegularExpression(pattern: pattern,
                                                options: NSRegularExpression.Options.caseInsensitive)
            let range = NSMakeRange(0, self.characters.count)
            self = regex.stringByReplacingMatches(in: self,
                                                  options: [],
                                                  range: range,
                                                  withTemplate: replaceWith)
        } catch {
            return
        }
    }
    
}

Et je l'utilise comme ça :

 var s = "<P>Merci à notre secrétaire pour ces magnifiques photos !!!</P></p><div class=\"powerpress_player\" id=\"powerpress_player_9462\"><audio class=\"wp-audio-shortcode\" id=\"audio-1092-3\" preload=\"none\" style=\"width: 100%;\" controls=\"controls\"><source type=\"audio/mpeg\" src=\"https://www.dvrgv.org/_Interviews/2017-06-19-LesAbeillesEtDaniel.mp3?_=3\" /><a href=\"https://www.dvrgv.org/_Interviews/2017-06-19-LesAbeillesEtDaniel.mp3\">https://www.dvrgv.org/_Interviews/2017-06-19-LesAbeillesEtDaniel.mp3</a></audio></div><p class=\"powerpress_links powerpress_links_mp3\">Podcast: <a href=\"https://www.dvrgv.org/_Interviews/2017-06-19-LesAbeillesEtDaniel.mp3\" class=\"powerpress_link_pinw\" target=\"_blank\" title=\"Lire dans une autre fenêtre\" onclick=\"return powerpress_pinw('https://www.dvrgv.org/?powerpress_pinw=1092-podcast');\" rel=\"nofollow\">Lire dans une autre fenêtre</a> | <a href=\"https://www.dvrgv.org/_Interviews/2017-06-19-LesAbeillesEtDaniel.mp3\" class=\"powerpress_link_d\" title=\"Télécharger\" rel=\"nofollow\" download=\"2017-06-19-LesAbeillesEtDaniel.mp3\">Télécharger</a></p>"
        
        
        let r = "<div class=\"powerpress_player\""
        let r1 = "<div class=\"powerpress_player\"\\b[^>]*>(.*?)\\/div>"
        
        
        
        s.stringByRemovingRegexMatches(pattern: r)
        print (s)
        

Avec r ça marche mais pas avec r1.

 

J'ai vérifié r1 avec le site http://regexr.com


--

seb@stien as iLandes

Linked In, Twitter, GitHub, StackOverFlowiLandes.fr

 

Applications : Plages.TVGirondins33Jardiner avec la luneDVRGVMidi Note Converter, FreeIMC.

 

It's not a bug, it's a feature.

Feature : A bug as described by the marketing department (Apple II Reference Manuel 1979 page 180)

 


#2 Lexxis

Lexxis

    Ecabosseur en fèves

  • Membre
  • PipPipPipPip
  • 419 messages

Posté 30 août 2017 - 15:05

Peut être avec cela

let r1 = "<div class=\"powerpress_player\".*?<\\/div>"


#3 Céroce

Céroce

    Mouleur de chocolats

  • Contrôleur d'arômes
  • 5 320 messages
  • LocationSaint-Leu-d'Esserent / France

Posté 30 août 2017 - 15:06

Je ne peux m'empêcher de citer cette blague archi-connue: «J'avais un problème. J'ai utilisé les RegEx pour le résoudre. Maintenant, j'ai deux problèmes!»

 

Je ne saisis pas exactement ce que tu essaie de faire? Retirer la balise powerpress_player et tout son contenu ?

Je n'ai pas réussi sur regexr.com avec r1.

 

Personnellement, à ce niveau, je crois que je parserais directement le XML pour retirer la balise. Les RegEx ne me paraissent pas le bon outil ici.


RenaudPradenc.com Je suis développeur iOS & Mac indépendant.

#4 Larme

Larme

    Broyeur de fèves

  • Artisan chocolatier
  • PipPipPipPipPipPip
  • 1 981 messages
  • LocationParis

Posté 30 août 2017 - 16:30

let sAttr = try! NSAttributedString.init(data: s.data(using: .utf8)!, options: [NSDocumentTypeDocumentAttribute:NSHTMLTextDocumentType], documentAttributes: nil)

Ça ne te va pas ça ?

Tu peux faire ensuite :

let sClean = sAttr.string

Tant que vous avez des dents, mangez des pommes. Tant que vous avez de l'argent, croquez la Pomme.

#5 iLandes

iLandes

    Torréfacteur de fèves

  • Membre
  • PipPipPipPipPip
  • 849 messages
  • LocationLandes

Posté 30 août 2017 - 17:36

Petit point explication.

 

Je récupère de l'HTML sous forme de String et je souhaite supprimer ce qu'il y a entre les balises "<div class=\"powerpress_player\" et "</div>". Bien sûr je veux garder toutes les autres balises HTML.

 

J'a fais des essais avec le code du premier post et là j'essaye avec une bibliothèque trouvée sur Cocoapod : https://github.com/crossroadlabs/Regex. Ca marche beaucoup mieux mais je galère à formuler l'expression RegEx.

 

Voici un extrait de mon texte:

 

"<img width="300" src="https://www.dvrgv.or...5-VeloTaxi.jpg"alt="Manu dans le vélo-taxi, Brigitte aux commandes" /><br />

<P>En juillet 2017, Brigitte décide de franchir le pas. En adéquation avec ses convictions personnelles, elle s’installe en auto-entreprise, comme prestataire de vélo-taxi, sur la commune de Saint-Marcellin. Une balade en centre-ville, un rendez-vous chez le médecin, une visite chez votre ami(e), un départ ou un retour de voyage, Brigitte et son 3 roues, sillonnent les rues du centre-ville.</P><br />
<P>sur un coup de tête, ou sur une réservation, laissez-vous tenter par une balade au grand air !</P></p>
<div class="powerpress_player" id="powerpress_player_9779"><!--[if lt IE 9]><script>document.createElement('audio');</script><![endif]-->
<audio class="wp-audio-shortcode" id="audio-1097-1" preload="none" style="width: 100%;" controls="controls"><source type="audio/mpeg" src="https://www.dvrgv.or...loTaxi.mp3?_=1"/><a href="https://www.dvrgv.org/_Reportages/2017-07-26-BrigiteVeloTaxi.mp3">https://www.dvrgv.org/_Reportages/2017-07-26-BrigiteVeloTaxi.mp3</a></audio></div>"

--

seb@stien as iLandes

Linked In, Twitter, GitHub, StackOverFlowiLandes.fr

 

Applications : Plages.TVGirondins33Jardiner avec la luneDVRGVMidi Note Converter, FreeIMC.

 

It's not a bug, it's a feature.

Feature : A bug as described by the marketing department (Apple II Reference Manuel 1979 page 180)

 


#6 iLandes

iLandes

    Torréfacteur de fèves

  • Membre
  • PipPipPipPipPip
  • 849 messages
  • LocationLandes

Posté 30 août 2017 - 17:54

Personnellement, à ce niveau, je crois que je parserais directement le XML pour retirer la balise. Les RegEx ne me paraissent pas le bon outil ici.

 

Ca je ne vois pas comment faire...


--

seb@stien as iLandes

Linked In, Twitter, GitHub, StackOverFlowiLandes.fr

 

Applications : Plages.TVGirondins33Jardiner avec la luneDVRGVMidi Note Converter, FreeIMC.

 

It's not a bug, it's a feature.

Feature : A bug as described by the marketing department (Apple II Reference Manuel 1979 page 180)

 


#7 Joanna Carter

Joanna Carter

    Broyeur de fèves

  • Contrôleur d'arômes
  • 1 996 messages
  • LocationPlestin-les-Grèves (22)

Posté 30 août 2017 - 18:03

Tu n'as pas pensé de faire un substring jusqu'à l'index de "<div" ?



#8 iLandes

iLandes

    Torréfacteur de fèves

  • Membre
  • PipPipPipPipPip
  • 849 messages
  • LocationLandes

Posté 30 août 2017 - 18:07

Si j'y ai pensé mais ça me parait plus compliqué surtout qu'il peut y avoir plusieurs fois le même contenu à enlever dans mon contenu.

 

J'y suis presque avec le RegEx mais que c'est chiant


--

seb@stien as iLandes

Linked In, Twitter, GitHub, StackOverFlowiLandes.fr

 

Applications : Plages.TVGirondins33Jardiner avec la luneDVRGVMidi Note Converter, FreeIMC.

 

It's not a bug, it's a feature.

Feature : A bug as described by the marketing department (Apple II Reference Manuel 1979 page 180)

 


#9 Joanna Carter

Joanna Carter

    Broyeur de fèves

  • Contrôleur d'arômes
  • 1 996 messages
  • LocationPlestin-les-Grèves (22)

Posté 30 août 2017 - 18:18

Tu peux utiliser string.components(separatedBy: _) pour le trancher d'abord ?



#10 Larme

Larme

    Broyeur de fèves

  • Artisan chocolatier
  • PipPipPipPipPipPip
  • 1 981 messages
  • LocationParis

Posté 31 août 2017 - 09:23

Le pattern de @Lexxis semble fonctionner, à une modification près.

Le tien (r1) foire de mes tests rapides pour deux raisons : La première c'est le \b, il n'y a pas de raison d'être là.
Et la seconde, c'est la même que celui de @Lexxis.

Les patterns proposés ne gèrent pas les sauts de lignes.

J'ai c/c ton texte entier dans un Regex Online (j'utilise Regex101) et on remarque clairement qu'en supprimant le changement de ligne entre <![endif]--> et <audio class=, cela semble mieux fonctionner. Parce que  « .*? » c'est : "matches any character (except for line terminators)"


Tant que vous avez des dents, mangez des pommes. Tant que vous avez de l'argent, croquez la Pomme.

#11 Lexxis

Lexxis

    Ecabosseur en fèves

  • Membre
  • PipPipPipPip
  • 419 messages

Posté 31 août 2017 - 09:44

Pour les "line breaks" il devrait être possible de la prendre en compte en changeant le "." dans le pattern par "[\s\S]".


  • iLandes aime ceci

#12 iLandes

iLandes

    Torréfacteur de fèves

  • Membre
  • PipPipPipPipPip
  • 849 messages
  • LocationLandes

Posté 31 août 2017 - 11:33

Merci @Lexxis et aux autres contributeur, mon problème est résolu  :clap:  :clap:


--

seb@stien as iLandes

Linked In, Twitter, GitHub, StackOverFlowiLandes.fr

 

Applications : Plages.TVGirondins33Jardiner avec la luneDVRGVMidi Note Converter, FreeIMC.

 

It's not a bug, it's a feature.

Feature : A bug as described by the marketing department (Apple II Reference Manuel 1979 page 180)

 






Also tagged with one or more of these keywords: RegEx

0 utilisateur(s) li(sen)t ce sujet

0 membre(s), 0 invité(s), 0 utilisateur(s) anonyme(s)