5

私はJavaに比較的慣れていないため、文字列から複数の部分文字列を抽出するために助けが必要です. 文字列の例は次のとおりです。

String = "How/WRB can/MD I/PRP find/VB a/DT list/NN of/IN celebrities/NNS '/POS real/JJ names/NNS ?/."

望ましい結果:WRB MD PRP VB DT NN IN NNS POS JJ NNS

POS タグを抽出し、POS タグに基づいて計算を行う必要がある、おそらく数千の同様の POS タグ付き行を含むテキスト ファイルがあります。

トークナイザーを使用してみましたが、実際には望んでいた結果が得られませんでした。配列を保存して後で使用する必要があるため、配列を使用して保存しようとしsplit()ましたが、それでも機能しませんでした。

最後に、パターン マッチャーを使用してみましたが、スラッシュを含む単語を返すため、正規表現に問題があります。

Regex: [\/](.*?)\s\b
Result: /WRB /MD ....

これを行うためのより良い方法がある場合は、私に知らせてください。誰かが私の正規表現の何が問題なのかを理解するのを手伝ってくれます。

4

4 に答える 4

8

これはうまくいくはずです:

String string = "How/WRB can/MD I/PRP find/VB a/DT list/NN of/IN celebrities/NNS '/POS real/JJ names/NNS ?/.";
System.out.println(string.replaceAll("[^/]+/([^ ]+ ?)", "$1"));

版画:WRB MD PRP VB DT NN IN NNS POS JJ NNS .

于 2012-09-03T11:26:07.130 に答える
6

それでもパターン マッチングを使用したい場合は、肯定的な後読みを見てください。スラッシュで始まる単語を一致させることはできますが、実際にはスラッシュ自体には一致しません。

例は次のようになります。

(?<=/).+?(?= |$)

スラッシュで始まり、その後にスペースまたは文字列の末尾が続くものすべてに一致します

Java で書かれた実際の例を次に示します。

import java.util.regex.Pattern;
import java.util.regex.Matcher;
import java.util.LinkedList;

public class SO {
    public static void main(String[] args) {
        String string = "How/WRB can/MD I/PRP find/VB a/DT list/NN of/IN celebrities/NNS '/POS real/JJ names/NNS ?/.";
        Pattern pattern = Pattern.compile("(?<=/).+?(?= |$)");
        Matcher matcher = pattern.matcher(string);

        LinkedList<String> list = new LinkedList<String>();

        // Loop through and find all matches and store them into the List
        while(matcher.find()) { 
            list.add(matcher.group()); 
        }

        // Print out the contents of this List
        for(String match : list) { 
            System.out.println(match); 
        }
    }
}
于 2012-09-03T11:20:35.557 に答える
2
String string = "How/WRB can/MD I/PRP find/VB a/DT list/NN of/IN celebrities/NNS '/POS real/JJ names/NNS ?/.";

string = string .replaceAll("\\S+/", "").replace(".", "");  

System.out.println(string );
于 2012-09-03T11:32:19.207 に答える
0

どうstr = str.repalceAll("\\S+/", "")ですか?非空白文字の削除とそれに続くスラッシュを置き換えます。

于 2012-09-03T11:22:15.657 に答える