Java регулярное выражение путаница - PullRequest
1 голос
/ 28 июля 2010

Я ненавижу задавать такие глупые вопросы, но почему мой код не выполняет то, что я ожидаю?

Java-код в основном методе:

String s = "\"The fat-dog [ruffus] @nd the stupid-cat [*mewzer*] don't like each other!\"";
String[] tokens = s.replaceAll("[\\x27]+", "").replaceAll("[^a-zA-z_\\x2D]+", " ").replaceAll("\\s+", " ").trim().split(" ");

System.out.println(s);
for (String t : tokens)
    System.out.println("Token: " + t);

Это печатает:

"Толстяк [ruffus] @nd глупый кот [ mewzer ] не любят друг друга!"

Token: The
Token: fat-dog
Token: [ruffus]
Token: nd
Token: the
Token: stupid-cat
Token: [
Token: mewzer
Token: ]
Token: dont
Token: like
Token: each
Token: other

Что в основном верно, кроме этих чертовых скобок! Разве они не должны быть заменены выражением "[^a-zA-z_\\x2D]+"? Я даже попытался добавить replaceAll("\\[\\]"," "), а затем replaceAll("\\x5B\\x5D"," ") безрезультатно.


Как мне избавиться от этих скобок? Что мешает им быть замененными в трех заменах всех утверждений, которые я только что упомянул?

Ответы [ 3 ]

2 голосов
/ 28 июля 2010

Ваша первая попытка не сработала из-за этого

replaceAll ("[^ a-zA- z _ \ x2D] +", "")

Этот диапазон символов фактически включает [и] в наборы для Западной Европы / Северной Америки. [\] ^ `_ располагаются между Z и a, что обычно удобно, когда вы пишете A- z , но для вас также подводный камень!

Вы, вероятно, имели в виду A- Z

1 голос
/ 28 июля 2010

Это:

replaceAll("\\[\\]"," ")

Вероятно, должно быть:

replaceAll("(\\[|\\])"," ")

Вы пытались заменить экземпляры [] на вместо замены [ или ] на .

0 голосов
/ 29 июля 2010

Похоже, есть лучший способ сделать то, что вы действительно хотите сделать (удалив все несловарные символы из строки (кроме дефиса)):

String[] tokens = s.replaceAll("[^\\w\\s-]+", "").replaceAll("\\s+", " ").trim().split(" ");

Тем не менее, в вашей строке остаются только цифры. Это проблема?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...