Java expression régulière correspondant _all_ espaces
Je suis à la recherche d'une expression régulière en Java, ce qui correspond à tous les caractères dans une Chaîne. "\s" ne correspond qu'à certains, il ne correspond pas
et similaires non-ascii des espaces. Je suis à la recherche d'une expression régulière qui correspond à tous (commun) des espaces blancs qui peuvent se produire dans une Java Chaîne.
[Modifier]
Pour clarifier: je ne veux pas la séquence de chaîne "
", je veux dire la sincle caractère unicode U+00A0 qui est souvent représenté par "
", par exemple, en HTML, et tous les autres caractères unicode avec un semblable blanc-espace meainig, par exemple, "ÉTROIT NO-BREAK SPACE" (U+202F), Mot menuisier encodés en Unicode 3.2 et au-dessus, U+2060, "ZÉRO de la LARGEUR de NO-BREAK SPACE" (U+FEFF) et tout autre caractère qui peut être regareded blancs de l'espace.
[Répondre]
Pour mon objet, c'est à dire la capture de tous les espaces, unicode + traditionnel, l'expression suivante fait le travail:
[\p{Z}\s]
La réponse est dans les commentaires ci-dessous, mais depuis il est un peu caché, je le répète ici.
- Pour être clair, tu veux dire littéralement
ou sa sortie\u00A0
? Qui fait toute la différence. - 's de sortie? Sortie par quoi?
- Le navigateur internet par exemple.
Vous devez vous connecter pour publier un commentaire.
La
est que les espaces dans le code HTML. Utiliser un Analyseur HTML pour extraire le texte brut. et\s
devrait fonctionner parfaitement.
génère\u00A0
à la fin.
". Qu'est ce que la "on mélange les niveaux d'abstraction ici" de Vinkos réponse est d'environ (si j'ai bien compris).\p{Z}
au lieu de\s
pour correspondre à des espaces, il correspondra à\u00A0
n'est pas un caractère d'espacement, dans la mesure du regexpes sont concernés. Vous devez soit modifier la regexp pour inclure ces chaînes, en plus de \s, comme /(\s| |%20)/, ou précédemment analyser le contenu de la chaîne pour obtenir de l'ASCII ou Unicode représentation des données.
On mélange les niveaux d'abstraction ici.
Si, ce qui, après une minutieuse de relire la question semble être le cas, vous êtes après un moyen de faire correspondre tous les espaces se référant à la norme ASCII, plus les espaces codepoints,
\p{Z}
ou\p{Zs}
va faire le travail.Vous devriez vraiment préciser votre question parce qu'il a trompé beaucoup de gens (même en train de faire la bonne réponse à certains downvotes).
\p{javaWhitespace}
ne semblent pas correspondre 
(U+00A0).\p{Z}
ou\p{Zs}
à la place. Je l'ai testé en Java, et ils ne correspondent U+00A0.\p{Z}
tout d'abord, dans un commentaire sous sa propre réponse.\p{Z}
et les trucs similaires est ici: regular-expressions.info/unicode.htmlThe supported categories are those of The Unicode Standard in the version specified by the Character class.
qui 1,6 était la version 4.0 , et à l'article 2.4 a tableau 2-2 liste de la classe de caractères désignations. Zs est répertorié, Z n'est pas répertorié, mais je suppose que Z est probablement pris en charge pour le retour à la compatibilité avec l'accord préalable versions unicode, mais je ne vais pas la peine de regarder les versions antérieures de l'unicode spec pour vérifier que... 🙂Vous clarifiée la question de la façon que j'attendais: vous n'êtes en fait pas la recherche de la Chaîne de caractères littérale
comme beaucoup ici semblent penser et pour qui la solution est trop évident.Eh bien, malheureusement, il n'y a aucun moyen de les faire correspondre à l'aide de regex. Le mieux est d'inclure le particulier codepoints dans le modèle, par exemple:
"[\\s\\xA0]"
.Modifier comme ce fut dans l'un des commentaires, vous pouvez utiliser le sans-papiers
"\\p{Z}"
pour cela. Alan, pouvez vous s'il vous plaît laisser un commentaire comment vous avez trouvé ça? Celui-ci est tout à fait utile.\s
ne correspond pas\xA0
-______________________-Voici un résumé que j'ai fait de plusieurs définitions concurrentes de "espaces":
http://spreadsheets.google.com/pub?key=pd8dAQyHbdewRsnE5x5GzKQVous pourriez vous retrouver avoir à la liste explicite de la supplémentaires à vos proches qui ne sont pas appariés par l'un des prefab ceux.
n'est pas un espace blanc. C'est un personnage de codage de la séquence qui représente les espaces dans le code HTML. Probablement vous voulez convertir HTML en texte codé en texte brut avant l'exécution de votre chaîne de match contre lui. Si c'est le cas, aller chercherjavax.swing.text.html
Dans le cas où tout le monde court à nouveau à cette question, la recherche de l'aide, je vous suggère de poursuivre la réponse suivante: https://stackoverflow.com/a/6255512/1678392
La version courte:
\\p{javaSpaceChar}
Pourquoi: Par la Modèle de classe, ce cartes le Caractère.isSpaceChar méthode:
La regex personnages sont les seuls indépendants de l'encodage. Voici une liste de certains caractères en Unicode sont non-impression:
Combien de caractères non-imprimables sont dans l'usage commun?