Regex, tous les caractères non alphanumériques sauf les espaces blancs ou deux-points
131
Comment puis-je faire celui-ci n'importe où?
Fondamentalement, j'essaie de faire correspondre toutes sortes de caractères divers tels que les esperluettes, les points-virgules, les signes dollar, etc.
Les autres vérifient l'espace mais pas les espaces blancs ou ont la négation au mauvais endroit pour annuler réellement.
Zachary Scott
\ w attrape également les traits de soulignement - qui est un caractère non alphanumérique
Tudor Constantin
Ah! Je vais modifier - je ne le savais pas. Je pense que cela fonctionne différemment pour différents moteurs, mais pourrait tout aussi bien donner à l'OP une réponse sûre.
Luke Sneeringer
2
Évalué car cela n'attrapera pas les caractères non latins, ni les caractères latins "spéciaux".
damian
16
Si vous voulez traiter les caractères latins accentués (par exemple à Ñ) comme des lettres normales (c'est-à-dire éviter de les faire correspondre également), vous devrez également inclure la plage Unicode appropriée ( \ u00C0- \ u00FF ) dans votre expression régulière , donc il ressemblerait à ceci:
/[^a-zA-Z\d\s:\u00C0-\u00FF]/g
^ annule ce qui suit
a-zA-Z correspond aux lettres majuscules et minuscules
\d correspond aux chiffres
\s correspond à un espace blanc (si vous souhaitez uniquement faire correspondre des espaces, remplacez-le par un espace)
: correspond à un deux-points
\u00C0-\u00FF correspond à la plage Unicode pour les caractères latins accentués.
nb. La correspondance de plage Unicode peut ne pas fonctionner pour tous les moteurs regex, mais ce qui précède fonctionne certainement en Javascript (comme le montre ce stylo sur Codepen).
nb2. Si vous ne vous souciez pas de faire correspondre les traits de soulignement, vous pouvez remplacer a-zA-Z\dpar \w, qui correspond aux lettres, aux chiffres et aux traits de soulignement.
Cette plage contient certains caractères qui ne sont pas alphanumériques (U + 00D7 et U + 00F7), et exclut de nombreux caractères accentués valides de langues non occidentales comme le polonais, le tchèque, le vietnamien, etc.
tripleee
1
J'ai voté pour la description de chaque partie du RegEx.
Évalué car cela n'attrapera pas les caractères non latins, ni les caractères latins "spéciaux".
damian
14
Il est facile de voter contre une réponse, et encore plus difficile de fournir des informations constructives au tableau, par exemple comment peut-on alors attraper les caractères non latins, ni les caractères latins «spéciaux»? D'après mon décompte, vous avez voté à la baisse pour 3 réponses pour la même raison, et à mon avis pour une modification plutôt mineure. Par exemple, je suis ici pour trouver une regex pour exactement ce qui est discuté dans ces réponses. Je me fiche des jeux de caractères qui ne seront pas utilisés dans mon application. Loi des rendements décroissants.
Aaron est peut-être une "modification mineure" pour un citoyen américain, mais très pertinent pour ... le reste de cette planète.
C'est la seule réponse ici qui traite correctement l'alphabet accentué Unicode de manière appropriée. Malheureusement, tous les moteurs de regex ne prennent pas en charge cette fonctionnalité (même Python en manque, à partir de la version 3.8, même si son moteur de regex est apparemment basé sur PCRE).
tripleee
1
Je vais supprimer Python de la réponse, je pensais avoir testé cela mais apparemment pas. Merci d'avoir fait remarquer cela.
Cela semble répéter la réponse acceptée de 2011. Les ancres ^et la $confinent pour correspondre à des lignes entières et le *quantificateur signifie qu'il correspond également aux lignes vides.
tripleee
0
En JavaScript:
/[^\w_]/g
^négation, c'est-à-dire sélectionner tout ce qui n'est pas dans l'ensemble suivant
\w tout caractère de mot (c'est-à-dire tout caractère alphanumérique, plus le trait de soulignement)
_ annule le trait de soulignement, car il est considéré comme un caractère «mot»
Exemple d'utilisation - const nonAlphaNumericChars = /[^\w_]/g;
/[^a-zA-Z0-9\s\:]*/
Réponses:
la source
\d
et\s
sont des extensions Perl qui sont généralement pas pris en charge par les anciens outils commegrep
,sed
,tr
,lex
, etc.Cela devrait le faire:
la source
Si vous voulez traiter les caractères latins accentués (par exemple à Ñ) comme des lettres normales (c'est-à-dire éviter de les faire correspondre également), vous devrez également inclure la plage Unicode appropriée ( \ u00C0- \ u00FF ) dans votre expression régulière , donc il ressemblerait à ceci:
^
annule ce qui suita-zA-Z
correspond aux lettres majuscules et minuscules\d
correspond aux chiffres\s
correspond à un espace blanc (si vous souhaitez uniquement faire correspondre des espaces, remplacez-le par un espace):
correspond à un deux-points\u00C0-\u00FF
correspond à la plage Unicode pour les caractères latins accentués.nb. La correspondance de plage Unicode peut ne pas fonctionner pour tous les moteurs regex, mais ce qui précède fonctionne certainement en Javascript (comme le montre ce stylo sur Codepen).
nb2. Si vous ne vous souciez pas de faire correspondre les traits de soulignement, vous pouvez remplacer
a-zA-Z\d
par\w
, qui correspond aux lettres, aux chiffres et aux traits de soulignement.la source
Essaye ça:
Exemple JavaScript:
Voir un exemple en ligne:
http://jsfiddle.net/vhMy8/
la source
Aucun espace alphanumérique, blanc ou «_».
la source
Si vous voulez dire "caractères non alphanumériques", essayez d'utiliser ceci:
la source
Cette expression régulière fonctionne pour C # , PCRE et Go pour n'en nommer que quelques-uns.
Cela ne fonctionne pas pour JavaScript sur Chrome d'après ce que dit RegexBuddy . Mais il y a déjà un exemple pour cela ici.
Cette partie principale de ceci est:
\p{L}
qui représente
\p{L}
ou\p{Letter}
tout type de lettre de n'importe quelle langue. »Le regex complet lui-même:
[^\w\d\s:\p{L}]
Exemple: https://regex101.com/r/K59PrA/2
la source
Essayez d'ajouter ceci:
Cela a fonctionné pour moi ... :)
la source
^
et la$
confinent pour correspondre à des lignes entières et le*
quantificateur signifie qu'il correspond également aux lignes vides.En JavaScript:
/[^\w_]/g
^
négation, c'est-à-dire sélectionner tout ce qui n'est pas dans l'ensemble suivant\w
tout caractère de mot (c'est-à-dire tout caractère alphanumérique, plus le trait de soulignement)_
annule le trait de soulignement, car il est considéré comme un caractère «mot»Exemple d'utilisation -
const nonAlphaNumericChars = /[^\w_]/g;
la source