2017-01-16 20 views
0

私の質問は次のとおりです。正規表現のグループ化

非常に長い文字列があり、非常に多くの値が異なるタグで囲まれています。中国語、英語の言葉遣い、数字などの値。

指定パターンで区切りたいです。以下は例である: (Iパターンを見つけたいXXXXXX xxxxは、中国語、英語、数字または任意の表記法であるが、タグを識別するために、これら2つのシンボルがあるとして「<」または「>」を含まない場合)

しかし、私はこれらのパターンに奇妙なものを見つけました。パターンは、(最初​​の二つのタグをrecgonizeなかったようだ)が、第2 1

String a = "<f\"number\">4 <f\"number\"><f$n0>14 <h85><f$n0>4 <f$n0>2 <f$n0>2 7 -<f\"Times-Roman\">7<f\"number\">"; 
Pattern p = Pattern.compile("<f\"number\">[\\P{sc=Han}*\\p{sc=Han}*[a-z]*[A-Z]*[0-9]*^<>]*<f\"number\">"); 
Matcher m = p.matcher(a); 

while(m.find()){ 
    System.out.println(m.group()); 
} 

出力は\\P{sc=Han}ため

+0

あなたはXML/HTMLを解析する必要がある場合は、あなたが考慮しなければなりませんXMLパーサーを使用します。正規表現はこれを扱うほど辛口ではありません。 –

+0

ごめんなさい。 – DickDickSean

+0

予想される結果は – DickDickSean

答えて

2

文字クラス[\\P{sc=Han}*\\p{sc=Han}*[a-z]*[A-Z]*[0-9]*^<>]*マッチ0以上の任意の文字私の文字列と同じで、 \\p{sc=Han}は反対です。

私はあなたがしたいと思います:

Pattern p = Pattern.compile("<f\"number\">[\\P{sc=Han}a-zA-Z0-9]*<f\"number\">"); 

あなたがスペースを追加することもできます。

Pattern p = Pattern.compile("<f\"number\">[\\P{sc=Han}a-zA-Z0-9\s]*<f\"number\">"); 

か:

Pattern p = Pattern.compile("<f\"number\">[^<]*<f\"number\">"); 
+0

であるはずです。ありがとう、私はこの1つを試しましたが、m.group()はまだ他のアイデア全体を返すのですか? – DickDickSean

+0

それは動作します。私は愚かだ。ありがとうございました〜3〜 – DickDickSean

+0

@DickDickSean:うれしいことに、嬉しいです。答えを受け入れられたものとして自由に記入してください。将来の読者には役立ちます。参照:http://stackoverflow.com/help/accepted-answer – Toto

関連する問題