Il existe plusieurs packages disponibles pour l'utilisation d'expressions régulières dans HASKELLL (E.G. TEXT.REGEX.BASE, TEXT.REGEX.POSIX, etc.). La plupart des forfaits que j'ai vus jusqu'à présent utilisent un sous-ensemble de regex je sais, par lequel je veux dire: je suis habitué à scinder une phrase en mots avec la regex suivante: de Il y a deux questions: P>
4 Réponses :
Le '\ w' est un modèle Perl et pris en charge par PCRE, que vous pouvez accéder à HASKELLL avec mon Regex- PCRE Package ou le Bibliothèque PCRE-Light . Si votre entrée est une liste de caractères, la fonction «mots» dans le prélude standard peut suffire; Si votre entrée est ASCII BYTESTRING, alors Données .Bytestring.char8 peut fonctionner. Il peut y avoir une bibliothèque UTF8 avec la fractionnement de mots, mais je ne peux pas le trouver rapidement. P>
Si vous souhaitez casser en mots et filtrer des objets autres que des lettres, vous pouvez utiliser le filtre et isalpha code> ou
ISALPHANUM code> (ou l'un des autres
est code> fonctions dans
data.char code> cette suite de votre besoin.)
import Data.Char
wordsButOnlyLetters = map (filter isAlpha) . words
J'utiliserais la suggestion d'Adam ou (peut-être plus lisible) pas besoin de réégalités ici. p> p>
Juste une note. La division en mots n'est pas égale à cela. Par exemple, wadlesby (pas. Isletter) "Je veux avoir 14 balles." Code> retourner
["" Je veux "," Balls "] Code>, Mais
14 code> peut être un mot réellement.
@ Дмитрий Ce n'est pas censé être une réponse complète. En fait, \ w code> est
lettres ++ chiffres ++ "_" code> donc
non. Isletter code> est juste un espace réservé. Je voulais montrer un motif de fractionnement facile et compréhensible.
La fonction de mots fonctionne bien, mais cela ressemble plus à "Split by White Space", utilisez SplitEcregex.
import Text.Regex (splitRegex, mkRegex) splitByWord :: String -> [String] splitByWord = splitRegex (mkRegex "[^a-zA-Z]+") >splitByWord "Word splitting with regular expressions in Haskell" >["Word","splitting","with","regular","expressions","in","Haskell"]
n'a pas pu trouver le module 'text.regex' peut-être que vous vouliez dire texte.fin code>
Avez-vous besoin d'expressions régulières pour diviser les mots? Il y a une fonction
mots code> qui fait exactement ce que vous voulez.
Merci, je ne savais pas cette fonction mais ça ne fait pas ce que je veux. S'il y a des points, des virgules, etc. dans une chaîne, la regex les ignorerait mais
mots code> les attacherait. Par exemple:
prélude> mots "juste un test simple." Code> résulterait
["juste", "A", "SIMPLE" "] CODE> Je le veux sans le point.