0

私は正規表現が苦手で、この問題について何か助けていただければ幸いです。

REST 呼び出しからこのような応答を得ています

    {"responseData":{"translatedText":"Ciao mondo"},"responseDetails":"","responseStatus":200,"matches":[{"id":"424913311","segment":"Hello World","translation":"Ciao mondo","quality":"74","reference":"","usage-count":50,"subject":"All","created-by":"","last-updated-by":null,"create-date":"2011-12-29 19:14:22","last-update-date":"2011-12-29 19:14:22","match":1},{"id":"0","segment":"Hello World","translation":"Ciao a tutti","quality":"70","reference":"Machine Translation provided by Google, Microsoft, Worldlingo or the MyMemory customized engine.","usage-count":1,"subject":"All","created-by":"MT!","last-updated-by":null,"create-date":"2012-05-14","last-update-date":"2012-05-14","match":0.85}]}

私が必要とするのは、それらの引用の間にある「Ciao mondo」だけです。Java の分割機能でこれができることを期待していましたが、残念ながら、翻訳前にテキストを指定できたので、2 つの別々の区切り文字は許可されていません。

簡単にするために、私が行き詰まっているのは、translatedText":" と次の " の間にあるものをすべて収集する正規表現です。

どんな助けにもとても感謝しています

4

3 に答える 3

3

式を使用\"translatedText\":\"([^\"]*)\"して一致をキャプチャできます。

式の意味は次のとおりです。find quotedtranslatedTextの後にコロンと開始引用符が続きます。次に、次の引用符の前のすべての文字に一致し、結果をキャプチャ グループにキャプチャします。

String s = " {\"responseData\":{\"translatedText\":\"Ciao mondo\"},\"responseDetails\":\"\",\"responseStatus\":200,\"matches\":[{\"id\":\"424913311\",\"segment\":\"Hello World\",\"translation\":\"Ciao mondo\",\"quality\":\"74\",\"reference\":\"\",\"usage-count\":50,\"subject\":\"All\",\"created-by\":\"\",\"last-updated-by\":null,\"create-date\":\"2011-12-29 19:14:22\",\"last-update-date\":\"2011-12-29 19:14:22\",\"match\":1},{\"id\":\"0\",\"segment\":\"Hello World\",\"translation\":\"Ciao a tutti\",\"quality\":\"70\",\"reference\":\"Machine Translation provided by Google, Microsoft, Worldlingo or the MyMemory customized engine.\",\"usage-count\":1,\"subject\":\"All\",\"created-by\":\"MT!\",\"last-updated-by\":null,\"create-date\":\"2012-05-14\",\"last-update-date\":\"2012-05-14\",\"match\":0.85}]}";
System.out.println(s);
Pattern p = Pattern.compile("\"translatedText\":\"([^\"]*)\"");
Matcher m = p.matcher(s);
if (!m.find()) return;
System.out.println(m.group(1));

このフラグメントCiao mondo.

于 2012-05-14T03:25:31.947 に答える
0

引用符内の文字列を収集するには、先読みと後読みを使用します: (?<=[,.{}:]\").*?(?=\")

class Test
{
    public static void main(String[] args)
    {
        Scanner scanner = new Scanner(System.in);
        String in = scanner.nextLine();

        Matcher matcher = Pattern.compile("(?<=[,.{}:]\\\").*?(?=\\\")").matcher(in);

        while(matcher.find())
            System.out.println(matcher.group());
    }
}
于 2012-05-14T03:20:42.623 に答える
0

この正規表現を試してください -

^.*translatedText":"([^"]*)"},"responseDetails".*$

一致するグループには、Ciao mondo というテキストが含まれます。

これは、translatedText と responseDetails が常にサンプルで指定された位置にあることを前提としています。

于 2012-05-14T03:25:53.903 に答える