2012-02-29 3 views
2

Je cherche un motif regex en Java qui corresponde à tous les caractères sauf les lettres a à z.regex pattern java symbols

En d'autres termes, je veux un motif regex qui correspond à des symboles tels que

!"#¤%&/()=?`´\}}][{€[email protected] 

Ou une façon de découper une chaîne en lettres seulement.

À titre d'exemple permet de considérer la chaîne suivante:

"one!#"¤%()=) two}]}[()\ three[{€$" 

à:

"one two three" 
+3

Est-ce que tous les caractères signifient aussi unicode? – anubhava

+0

@anubhava Il doit: noter qu'il a inclus '¤' et' € 'et' ''et' "' dans sa chaîne. – tchrist

Répondre

4

La version Unicode serait

\PL 

\PL sont tous les points de code Unicode ne dispose pas des la propriété "Lettre".

\pL serait la contrepartie, tous les points de code Unicode que a la propriété "Lettre".

Peut-être que vous pouvez affiner here on regular-expressions.info certaines propriétés qui répondent le mieux à vos besoins.

Vous pouvez également les combiner en classes de caractères, identiques à celles que vous utiliseriez pour les classes prédéfinies, par ex.

[^\pl\pN] 

correspondrait à un caractère qui n'est pas une lettre ou un caractère numérique chiffres en Unicode.

+1

Techniquement, '\ pN' inclut les non-inscrits. '\ p {Nd}' est juste les chiffres décimaux. '\ pN' inclut aussi' \ p {Nl} 'pour les nombres de lettres comme les chiffres romains, et' \ p {No} 'pour les choses comme les fractions vulgaires, les exposants et les indices. Je vous ai de toute façon mis à jour parce que vous avez certainement la bonne idée. BTW, on dirait qu'il veut conserver des espaces. Je ne sais pas si cela signifie un espace Unicode ou juste un espace littéral. – tchrist

+0

@tchrist bien sûr, vous avez raison. Le terme correct était "caractère numérique" et j'ai écrit "digit". – stema

1

[^ a-zA-Z] est une classe de caractères qui correspond à tous les caractères en dehors des lettres a à z en majuscule ou en minuscule.

+0

Cela ne va-t-il pas devenir «naïf» en «nef»? – tchrist

+0

@tchrist oui - c'est ce que le demandeur a spécifié, n'est-ce pas? (bien sûr, il a oublié _spaces_ aussi - oh bien) –

1

La forme la plus simple: [^ a-z]

pourrait aussi être [^ a-zA-Z] si vous souhaitez supprimer des lettres majuscules aussi.

+0

Alors, comment je couper une chaîne, dites "one ?! two # three,. \] [" à "un deux trois"? –

+0

Cela ne changera-t-il pas «façade» en «faade»? – tchrist

+0

@tchrist Je pense - je suppose que cela dépend de la langue que vous analysez - si vous parssez du bon vieil anglais américain, par exemple, vous n'aurez probablement pas à vous soucier des tombes, des cédilles, des trémas, des circonflexes et le semblable pas trop, je pense. –

3

À titre d'exemple permet de considérer la chaîne suivante:

"one!#"¤%()=) two}]}[()\ three[{€$" 

à:

"one two three" 

Le modèle est nécessaire à tous les résultats qui est ni une lettre ni un séparateur. Sinon, vous finirez avec "onetwothree" au lieu du "one two three" que vous avez demandé.

[^\pL\pZ]