1

そのため、他の正規表現の投稿をいくつか見ていましたが、あるインスタンスで特別なケースを削除するのに問題がありました。特殊文字は単語の先頭にあります。

コードには次の行があります。

String k = s.replaceAll("([a-z]+)[()?:!.,;]*", "$1");

ここで、s は単数形です。たとえば、「(hi hi hi)」という文をトークン化して解析し、各トークンに対して replaceAll 関数を実行すると、次のような出力が得られます。

(hi
hi
hi

正規表現に欠けているものは何ですか?

4

4 に答える 4

0

位置が重要であるため、キャプチャ グループのに除外された文字も一致させる必要があります。

String k = s.replaceAll("[()?:!.,;]*([a-z]+)[()?:!.,;]*", "$1");
于 2013-04-07T00:08:17.020 に答える
0

あなたの置換は[a-z]+、の後の「特殊文字」を削除しただけです。そのため、(hiがそこに残されています。

が単一の単語であることがわかっている場合sは、次のいずれかを実行できます。

String k = s.replaceAll("\\W*(\\w+)\\W*", "$1");

また

String k = s.replaceAll("\\W*", "");
于 2013-04-07T00:10:44.477 に答える
0

これはもっと簡単にできます

これを試して :

String oldString = "Hi There @#$ What is %#your name?@#$@#$ 0123$$"; 
System.out.println(oldString.replaceAll("[\\p{Punct}\\s\\d]+", " ");

output : こんにちは、お名前は何ですか 0123

したがって、数値も受け入れます。.replaceAll("[\p{Punct}\s\d]+", " "); ほとんどすべての特殊文字を含む、使用されているすべての句読点を置き換えます。

于 2014-12-12T08:26:14.573 に答える