2010-10-28 4 views
0

J'essaie d'écrire une regex en Java pour se débarrasser de tous les caractères de ponctuation de titre et de queue à l'exception de "-" dans une chaîne, tout en gardant la ponctuation dans les mots intacts.regex supprimer titre et ponctuation

  1. J'ai essayé de remplacer les ponctuations "", String regex = "[\\p{Punct}+&&[^-]]"; en ce moment, mais il supprimera la ponctuation dans les mots aussi.

  2. J'ai essayé aussi de faire correspondre modèle: String regex = "[(\\w+\\p{Punct}+\\w+)]"; et Matcher.maches() pour correspondre à un groupe, mais il me donne nulle pour l'entrée String word = "#(*&wor(&d#)("

Je me demande quelle est la bonne façon de traiter l'appariement du groupe Regex dans ce cas

Exemples:

Input: @)($&[email protected])($&     Output: word 
Input: @)($)[email protected]#)(*$&$  Output: [email protected] 
+0

Pouvez-vous supprimer des données d'exemple? – Keng

Répondre

2
Pattern p = Pattern.compile("^\\p{Punct}*(.*?)\\p{Punct}*$"); 
    Matcher m = p.matcher("@)($)[email protected]#)(*$&$"); 
    if (m.matches()) { 
     System.out.println(m.group(1)); 
    } 

Pour plus d'informations, la clé est d'avoir des marques pour le début et la fin de la chaîne dans la regex (^ et $) et de faire correspondre la partie du milieu sans avarice (en utilisant *? au lieu de juste *).

+0

soyez averti que \ p {Punct} 'est une version ASCII de la classe de caractères POSIX' [[: punct:]] '. Cet ensemble (plutôt petit) inclut des caractères qui, à partir de la perspective Unicode, tombent à la fois dans les symboles '\ pP' * Ponctuation * et' \ pS' *. C'est parce que Unicode a créé deux catégories générales distinctes où POSIX n'en avait qu'une seule. – tchrist

Questions connexes