2008-11-22 9 views
2

ne parvenait pas à celui-ci et googler n'a pas aidé beaucoup non plus ..problème en remplaçant des mots en utilisant [^ a-zA-Z] regex

d'abord quelque chose que je sais: d'une chaîne et une expression régulière, comment remplacer toutes les occurrences de chaînes qui correspondent à cette expression régulière par une chaîne de remplacement? Utilisez la méthode replaceAll() dans la classe String.

Maintenant quelque chose que je suis incapable de faire. La regex que j'ai dans mon code est maintenant [^ a-zA-Z] et je suis sûr que cette regex va certainement avoir une portée. Seuls quelques caractères supplémentaires peuvent être ajoutés à la liste. Ce que je besoin en sortie dans le code ci-dessous Feuille de travail + bla mais ce que je me replaceAll à l'aide() est Feuille de travail ++++ bla

String homeworkTitle = "Worksheet%#5_blah"; 
String unwantedCharactersRegex = "[^a-zA-Z]"; 
String replacementString = "+"; 
homeworkTitle = homeworkTitle.replaceAll(unwantedCharactersRegex,replacementString); 
System.out.println(homeworkTitle); 

Quelle est la façon de atteindre la sortie que je souhaite? Y a-t-il des méthodes Java qui me manquent ici?

+0

Merci à tous !! [^ a-zA-Z] + a fonctionné tout simplement super .. Surpris ce fait - mon mauvais! –

+0

Je veux juste recommander http://regexpal.com/ où vous pouvez tester visuellement vos expressions rationnelles. Il est certes en javascript, mais pour des expressions pas trop compliquées ça devrait marcher comme java. – some

Répondre

5
[^a-zA-Z]+ 

Je le ferai bien.

Vous avez juste besoin d'un greedy quantifier afin de faire correspondre autant de caractères non alphabétiques que vous pouvez, et remplacer le tout le match par un « + » (a - par défaut - quantificateur gourmand)

Note: [^a-zA-Z]+? ferait le quantificateur "+" paresseux, et aurait donné le même résultat que [^a-zA-Z], car il aurait seulement correspondu à un seul caractère non-alphabétique à la fois.

+0

Juste un petit problème: Vous n'avez pas vraiment besoin d'un modèle "gourmand" autant que vous avez besoin d'un quantificateur - en disant une ou plusieurs occurrences - qui sont par défaut gourmands. – Axeman

2
String unwantedCharactersRegex = "[^a-zA-Z]" 

Ceci correspond à une seule non-lettre. Donc chaque non-lettre est remplacée par un +. Vous devez dire "un ou plusieurs", alors essayez

String unwantedCharactersRegex = "[^a-zA-Z]+" 
Questions connexes