J'ai fait une question sur la ponctuation et la regex, mais c'était confus.
SUPOSING, j'ai ce texte: P>
public static final String PUNCTUATION_SEPARATOR = "(" + "(" + "(?=^[\"'!?.,;:(){}\\[\\]]+)" + "|" + "(?<=^[\"'!?.,;:(){}\\[\\]]+)" + ")" + "|" + "(" + "(?=[\"'!?.,;:(){}\\[\\]]+($|\n))" + "|" + "(?<=[\"'!?.,;:(){}\\[\\]]+($|\n))" + ")" + ")";
5 Réponses :
À mon avis, vous voulez Ceci < / a>. Tout d'abord, vous explosez votre chaîne et la deuxième étape que vous utilisez Implode fonction. P>
Êtes-vous sûr de vouloir utiliser Regex? Il y a une implémentation plus rapide pour la division par un seul Char: StringTokenizer. Et cela peut renvoyer les délimiteurs.
String str= "word1, word2. word3? word4!"; String delim = ",.!?"; StringTokenizer st = new StringTokenizer(str, delim, true); while (st.hasMoreTokens()) { String token = st.nextToken(); ... // token will be: "word1", ",", " word2", ".", etc... }
Cela fonctionne, mais doit être regex ou quelque chose de plus complexe, car je veux seulement cracher sur les frontières (début et fin) et non au milieu.
Je veux dire que si le symbole est au milieu de la chaîne (A-B, 20.50), je ne veux pas écrire, seulement dans les frontières (test, [100, etc.).
Pour les séparateurs simples, je recommande le StringTokenizer. Mais voici une solution utilisant REGEX et un autre séparateur auxiliaire:
String s = "one,two, three four , five"; s = s.replaceAll("([,\\s]+)", "#$1#"); Pattern p = Pattern.compile("#"); String[] result = p.split(s);
Voici une regex que je pense fonctionnera:
public static final String PUNCTUATION_SEPARATOR = "(" + "(" + "(?=^[\"'!?.,;:(){}\\[\\]-]+)" + "|" + "(?<=^[\"'!?.,;:(){}\\[\\]-]+)" + ")" + "|" + "(" + "(?=[\"'!?.,;:(){}\\[\\]-]+($|\n))" + "|" + "(?<=[\"'!?.,;:(){}\\[\\]-]+($|\n))" + ")" + ")";
Voir cette question: Stackoverflow.com/questions/275768/...