1

解析の質問があります。文字列として保存されている文があります。各文の各単語を取得したいのですが、取得した単語をフィルタリングしたいと思います。たとえば、次のような文があるとします。

Hell0 3v3ryb0dy @ stackoverflow $people \implies queen$ は ~queen --> ~people. /#論理

私は次のことをします:

  1. 「H3ll0」をつかむ
  2. 3v3ryb0dyをつかむ
  3. @を捨てる
  4. 「$people」から「人」を取得
  5. 「\implies」から「implies」を取得
  6. 「queen$」から「queen」を取得
  7. 「等しい」をつかむ
  8. 「~queen」から「queen」をつかむ
  9. 捨てる -->
  10. 「~人」から「人」をつかむ
  11. '/#logic' から 'logic' を取得します

基本的に、英数字のみが必要であり、単語の前後に \ などの他の文字がある場合は、この他の文字を無視したいと考えています。

現在私はやっています:sentence.split(" ")

これは文から個々の単語を取得しますが、「$people」と「~people」を取得し、同じように扱いたい場合は異なる方法で扱います。

  1. どうすればこれを達成できますか?
  2. ここで正規表現が役に立ちますか?
4

2 に答える 2

4

この正規表現で文字列を\\W+分割し、1 つ以上の単語以外の文字で分割します。

String sentence = "Hell0 3v3ryb0dy @ stackoverflow $people \\implies queen$ equals ~queen --> ~people. /#logic";
String[] split = sentence.split("\\W+");
System.out.println(Arrays.asList(split));

出力

[Hell0, 3v3ryb0dy, stackoverflow, 人, 暗示, クイーン, 等しい, クイーン, 人, ロジック]

于 2012-11-05T02:40:46.573 に答える
1

私はこの正規表現を使用しています。
[^A-Za-z0-9 ]+(編集済み)そして私が得る出力は次のとおり
Hell0 3v3ryb0dy stackoverflow people implies queen equals queen people logic

です:これはあなたが期待しているものですか?

myregextester から抜粋

import java.util.regex.Pattern;
import java.util.regex.Matcher;
class Module1{
  public static void main(String[] asd){
  String sourcestring = "source string to match with pattern";
  Pattern re = Pattern.compile("[^A-Za-z0-9 ]+",Pattern.CASE_INSENSITIVE);
  Matcher m = re.matcher(sourcestring);
  String result = m.replaceAll("");
  }
}

$sourcestring after replacement:
Hell0 3v3ryb0dy stackoverflow people implies queen equals queen people logic
于 2012-11-05T02:33:08.447 に答える