J'essaye de trouver une regex pour enlever tous les mots qui contiennent des caractères non-mot. Donc, s'il contient un deux-points, une virgule, un nombre, un crochet, etc., supprimez-le de la ligne, pas seulement le caractère mais le mot. J'ai ceci jusqu'ici. Il ne doit pas nécessairement être parfait, donc supprimer les chaînes avec un tiret et une apostrophe est correct.Comment puis-je supprimer tous les jetons avec des caractères non-mots en Perl?
Répondre
s/\w*([^\w\s]|\d)+\w* ?//g;
Pourquoi pas \ W au lieu de^\ w? Juste curieux s'il y avait une raison spécifique. – Telemachus
Oui, \ W rattrape les espaces,^\ w \ s ne le fait pas. –
@Telemachus: parce qu'il veut aussi exclure les caractères d'espace. \ W inclurait des espaces. – runrig
$wordline = join(" ", grep(/^\w+$/, split(/\s+/, $wordline)));
C'est ce que je ferais. Notez, cependant, que \ w inclut le trait de soulignement, _, aussi. Si vous ne le souhaitez pas, spécifiez simplement votre propre classe de caractères. –
OP dit aussi ci-dessous qu'il ne veut pas de chiffres, donc cela vous laisse avec/^ [A-Za-z] + $/(ou équivalent Unicode). –
une autre mise en garde: en fonction de la division des jetons, Brian G pourrait vouloir conserver les caractères de division tels qu'ils sont. Votre solution change tous les séparateurs de jetons en
s/(?<!\S)(?![A-Za-z]+(?:\s|$))\S+(?!\S)//g
Dans regex-terre, un "caractère de mot" est une lettre, un chiffre ou un trait de soulignement ([A-Za-z0-9_]
). Il semble que vous l'utilisiez pour ne signifier que des lettres, donc \w
et \W
ne vous fera aucun bien. Mon expression régulière:
un tas de caractères non-blancs:
\S+
non précédé:
(?<!\S)
ou suivi:(?!\S)
par des caractères non-blancsà moins que tous les caractères sont des lettres:
(?![A-Za-z]+(?:\s|$))
Cela laissera derrière tous les sp aces entourant les mots qu'il supprime. Traiter avec ceux-ci correctement est un peu plus délicat que vous pourriez vous attendre; c'est beaucoup plus facile à faire dans une étape séparée, par exemple:
s/^ +| +(?= |$)//g
[A-Za-z] ne traite pas avec Unicode, vous souhaiterez probablement utiliser [[: alpha:]] à la place. –
Je revendique la licence d'enseignant. :) Avec [A-Za-z], il est parfaitement clair ce que vous faites correspondre (et ce que vous n'êtes pas). BTW, [[: alpha:]] ne gère pas non plus Unicode; c'est POSIX-parler pour "les choses classées comme des lettres dans les paramètres régionaux de la plate-forme sous-jacente." –
- 1. Comment supprimer tous les caractères d'une chaîne
- 2. Supprimer les caractères en Python
- 3. Comment gérer tous les caractères ASCII (y compris les caractères spéciaux regex) dans une regex Perl?
- 4. Supprimer tous les caractères non-ASCII de la chaîne
- 5. Comment puis-je supprimer tous les caractères autres que les mots, sauf le saut de ligne?
- 6. NSTextView avec des jetons
- 7. Comment supprimer des éléments en double d'un tableau en Perl?
- 8. Comment puis-je supprimer les sept derniers caractères d'une valeur de hachage en Perl?
- 9. Supprimer les caractères en utilisant Regex
- 10. Comment annuler l'effacement des caractères spéciaux XML en Perl?
- 11. Comment supprimer des caractères entre les balises HTML
- 12. Indexer les jetons bigrams en Lucene
- 13. Comment supprimer tous les sujets dans ActiveMQ?
- 14. Comment puis-je séparer les jetons en Java quand il y a des jetons nuls
- 15. Comment supprimer des sauts de ligne avec une regex Perl?
- 16. Comment puis-je supprimer des privilèges en Perl?
- 17. Comment faire pour supprimer des caractères entre < and > dans Perl?
- 18. Comment puis-je supprimer des caractères spéciaux?
- 19. En utilisant Perl, comment puis-je remplacer tous les espaces dans un fichier avec des retours à la ligne?
- 20. Comment supprimer des caractères d'un NSString?
- 21. Comment supprimer des caractères particuliers d'une chaîne en utilisant XSLT?
- 22. Comment extraire des caractères uniques ou des groupements fermés à partir d'une chaîne en Perl?
- 23. Comment supprimer tous les n-ième caractères dans le fichier (par lot ou vbs)?
- 24. Excel Remplacer tous les caractères trouvés
- 25. Comment faire défiler des jetons délimités avec une expression régulière?
- 26. Comment créer des identifiants uniques en Perl?
- 27. formatage de chaîne, supprimer les caractères principaux
- 28. Supprimer tous les enregistrements d'une table
- 29. Supprimer les caractères d'une chaîne dans C
- 30. Comment puis-je extraire tous les jetons {} d'une chaîne à l'aide de RegEx de .Net?
Comment un mot peut-il contenir des caractères non-mots? – MarkusQ
Dans le contexte des expressions régulières, les caractères "non-mots" incluent des traits d'union (par exemple, un trait rapide) et des apostrophes (par exemple, ne pas faire). – Telemachus