Partage
  • Partager sur Facebook
  • Partager sur Twitter

Expression régulière - Détection de phrase collée

Sujet résolu
    11 mai 2013 à 18:24:45

    Bonsoir à tous,

    Voilà, j'ai un soucis assez ennuyeux, je dispose d'un ensemble de donnée structuré dans un fichier XML que je souhaite inséré dans une base de donnée à l'aide de php (dom), jusqu'ici rien de bien compliqué...

    Mais j'ai remarqué que dans certains noeuds qui contiennent des paragraphes entiers, des phrases étaient collées..

    Par exemple nous avons des : "mot mot mot.Mot mot mot"

    Donc pour les décollés j'ai fais passer automatiquement chaque paragraphe par un preg_replace pour les décollés avec cette expression régulière :

    /(.*)\.(\w)/i

    Or, le fonctionnement de cette expression régulière est assez aléatoire...


    Je m'explique, au vu des résultats elle n'a pas l'air de marcher sur les mots avec une ponctuation collée (ex.: "mot mot mot.Mot, mot mot") et aussi sur les mots très cours (ex.: "mot mot mot.Du mot mot mot").

    De plus j'aurai bien voulu rajouter aussi d'autres ponctuations de fin de phrase de type "?" "!" ";" et donc n'étant pas très fort dans le domaine des expressions régulière je me demandé si quelqu'un avait une meilleur "expression" à faire passer à mon preg_replace 

    Cordialement Adam.

    -
    Edité par Adam Iris 11 mai 2013 à 18:25:05

    • Partager sur Facebook
    • Partager sur Twitter
      11 mai 2013 à 19:03:57

      Bonjour,

      Essaye :

      $chaine = 'mot, mot mot.Mot!Mot, mot mot';
      $chaine = preg_replace('/([\.,])(\S)/', '$1 $2', $chaine);
      $chaine = preg_replace('/(\S)([!?;])(\S)/', '$1 $2 $3', $chaine);

      Bon, si ça marche y'aura quand même quelques "effets de bord", si jamais y'a des expressions du style : "La version 1.1 a été remplacée."

      -
      Edité par RadicalDingos 11 mai 2013 à 19:09:35

      • Partager sur Facebook
      • Partager sur Twitter

      Vous avez la solution à votre problème ? Pensez à mettre votre sujet en "Résolu" !

        11 mai 2013 à 19:27:02

        Yes merci ça marche niquel, oui justement j'ai rajouter un preg_replace après ces deux la pour évité ce genre de soucis :

        			$chaine = preg_replace( '/(\d)\.\s(\d)/' , '$1.$2' , $chaine ) ;

        :)

        • Partager sur Facebook
        • Partager sur Twitter
          11 mai 2013 à 19:29:51

          Bonsoir.

          Plutôt que de capturer des parties de mots, il serait plus efficace de capturer les espaces pour les corriger.

          J'ai mis des espaces insécables là où il faut.

          preg_replace(array('/\s*\.\s*/', '/\s*([!?:;])\s*/'), array('. ', ' $1 '), $txt);



          • Partager sur Facebook
          • Partager sur Twitter

          Expression régulière - Détection de phrase collée

          × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
          × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
          • Editeur
          • Markdown