2010-12-12 37 views
2

Si j'ai une chaîne comme ceComment décompacter, minuscule, dé-espacer et couper une chaîne avec regex?

Newsflash: The Big(!) Brown Dog's Brother (T.J.) Ate The Small Blue Egg 

comment pourrais-je convertir en le suivant à l'aide regex:

newsflash-the-big-brown-dogs-brother-tj-ate-the-small-blue-egg 

En d'autres mots, la ponctuation est mis au rebut et les espaces sont remplacés par des traits d'union.

+3

Dans quelle langue? Btw, vous ne pouvez pas (raisonnablement) abaisser ou mettre en majuscule une chaîne en utilisant regex. –

+2

Les expressions régulières ne peuvent pas effectuer d'opérations de chaîne; ils peuvent seulement décrire des chaînes. – Gumbo

Répondre

1

Remplacez la regex [\s-]+ par "-", puis remplacez [^\w-] par "".

Ensuite, appelez ToLowerCase ou équivalent.

en Javascript:

var s = "Newsflash: The Big(!) Brown Dog's Brother (T.J.) Ate The Small Blue Egg"; 
alert(s.replace(/[\s+-]/g, '-').replace(/[^\w-]/g, '').toLowerCase()); 
0

Remplacer /\W+/ avec '-', qui remplacera tous les caractères non-mot avec un tableau de bord. Puis, réduisez les tirets en remplaçant /-+/ par '-'. Puis, en minuscules, la chaîne - les solutions regex pures ne peuvent pas le faire. Vous n'avez pas indiqué la langue que vous utilisez, donc je ne peux pas vous donner un exemple, mais votre langue peut avoir String.toLowercase() ou un appel tr/// (tr/A-Z/a-z/, par exemple, en Perl).

4

Il semble que vous vouliez créer une "URL plug" - une version URL du titre d'un article, par exemple. Cela signifie que vous voudrez vous assurer de supprimer tous les caractères non compatibles avec les URL, et pas seulement quelques-uns. Vous pouvez le faire de cette façon (dans l'ordre):

Retirez tous les non-lettre non nombre de caractères non-espace par:
Remplacement regex [^A-Za-z0-9 ] avec la chaîne vide "".

Remplacer tous les espaces avec un tiret par:
Remplacement regex \s+ par la chaîne "-".

Minuscules la chaîne par:
Java s = s.toLowerCase();
JavaScript s = s.toLowerCase();
C# s = s.ToLowerCase();
Perl $s = lc($s);
Python s = s.lower()
PHP $s = strtolower($s);
Ruby s = s.downcase

+0

'[^ A-z0-9]' est plus simple que '[[A-Za-z0-9]'. Aussi, je ne sais pas grand-chose sur regex mais pourquoi ne correspond-il pas 'A-z0-9'? Pourquoi fait-il l'inverse? Je ne comprends pas. Peu importe, je vois '^' représente un ensemble nié. – Jonathan