0

タグの行を含む次のようなファイルがあります。私は持っている:

Pattern.compile("<(?:TIMEX TYPE|ENAMEX TYPE)=.+?>(.+?)</(?:TIMEX|ENAMEX)>");

両方のタグが 1 行にある場合、これで必要なデータが取得されます。私の問題は、次の行を処理することです:

<ENAMEX
TYPE="CITED">1</ENAMEX>

タグの途中で分割があると正しく動作しません。そのため、正規表現を改善するためのヘルプ、または非標準の xml タグで機能する代替手段を探しています。

4

3 に答える 3

1

' ' (単一のスペース) を探す代わりに、空白を何度でも探してみませんか? 「\s+」のようなものにする必要があります。

于 2012-04-16T19:40:53.690 に答える
0

例によってあなたに代替案を与えるだけです。パターンマッチングの前に検索を置き換えると役立つ場合があります。

    final static String NEWLINE = "\n";
    final static String SPACE = " ";

public static void main(String[] args) {

            String s = "<ENAMEX\n TYPE=\"CITED\">1</ENAMEX>";

    Pattern pattern = Pattern.compile("<(?:TIMEX TYPE|ENAMEX TYPE)=.+?>(.+?)</(?:TIMEX|ENAMEX)>");

            s = s.replaceAll(NEWLINE, SPACE);

            Matcher matcher = pattern.matcher(s);

    while (matcher.find()) {
        System.out.println("Start index: " + matcher.start());
        System.out.println("End index: " + matcher.end());
    }
}
于 2012-04-16T20:10:15.157 に答える
0

リテラルスペースではなく、Pattern.DOTALLスイッチ空白 ( ) の一致が必要です。"\\s+"

Pattern.compile("<(?:TIMEX\\s+TYPE|ENAMEX\\s+TYPE)=.+?>(.+?)</(?:TIMEX|ENAMEX)>", Pattern.DOTALL);

このスイッチの javadoc からの抜粋では、スイッチについて説明していますDOTALL

dotall モードでは、式 . 行末記号を含む任意の文字に一致します。

また、その名前にもかかわらず、Pattern.MULTILINEスイッチここでは役に立たないことに注意してください。

于 2012-04-16T19:38:51.893 に答える