2017-09-15 1 views
0

J'essaie de diviser une phrase en un groupe de chaînes. Je veux garder tous les mots, la ponctuation et les espaces dans un tableau.Java regex pour diviser le long des mots, la ponctuation et les espaces, et tout garder dans un tableau

Par exemple:

"Bonjour mon nom est John Doe."

serait divisé en:

["Hello", "!", " ", "My", " ", "name", " ", "is", " ", "John", " ", "Doe"] 

J'ai actuellement la ligne de code suivante casser ma phrase:

String[] fragments = sentence.split("(?<!^)\\b"); 

Cependant, cela est en cours d'exécution dans une erreur où il compte un signe de ponctuation suivi par un espace comme une seule chaîne. Comment puis-je modifier mon regex pour en tenir compte?

+1

Bienvenue sur Stack Overflow. Il n'est pas nécessaire de crier * Besoin d'aide! * Dans votre titre ou votre message. Il est évident que vous avez besoin d'aide, ou vous ne publieriez pas ici en premier lieu. Tous ceux qui publient une question ici ont besoin d'aide. S'il vous plaît, prenez quelques minutes pour parcourir le [tour] et lire les pages [help], en particulier [ask]. Merci. –

+0

Votre texte contiendra-t-il un texte comme "" Quoi!? "' Comment devrait-il être traité?!? – Pshemo

Répondre

1

Vous pouvez essayer l'expression régulière suivante:

(?<=\b|[^\p{L}]) 
"Hello! My name is John Doe.".split("(?<=\\b|[^\\p{L}])", 0) 
// ⇒ ["Hello", "!", " ", "My", " ", "name", " ", "is", " ", "John", " ", "Doe", "."] 
+0

Cela a parfaitement résolu le problème. Je vous remercie! –

+1

Nice. La négation BTW de '\ p {...}' est '\ P {...}' donc vous pouvez utiliser '\\ P {L}' au lieu de '[^ \\ p {L}]'. – Pshemo

+0

@Pshemo Génial! Je vous remercie! –