4

我收到来自阿拉伯语音译服务的 JSON 响应。

作为第一步,我尝试使用以下内容仅提取带有音译词的响应部分Pattern"\"r\":\"(\\P{M}\\p{M}*)*?\"");。当我输出整个选择时,这部分响应被正确返回:

"r":"تست\\\/0|طست\\\/1|تسة\\\/1|طسة\\\/1|تيست\\\/1|طاسة\\\/1|تيسة\\\/1|تصت\\\/2|تثت\\\/2|تسط\\\/2"

但是,当我尝试仅使用 获取组部分时m.group(1),输出为2. 我期待"r":"和之间的所有单词部分"

当我尝试在 Eclipse 中选择整个控制台输出时,它似乎"r":是 LTR,其余的是 RTL。也许这打破了正则表达式。

"r":"我怎样才能在和之间获得整个组"

4

1 回答 1

4

您正在重复该组。你的基本结构就像

(matchCharacter)*?

所以 group1只捕获一个字符而不是整个字符串。每次再次使用该组时,都会覆盖先前的捕获。这就是为什么你会得到最后一个字符(这是最左边的一个,由于 RTL 写入)。

只是,将整个重复包装在一个组中,并使重复的部分不被捕获:

"\"r\":\"((?:\\P{M}\\p{M}*)*?)\""

这适用于 RTL 或 LTR 写入。仅,如果您使用最初的模式,您将获得最左边或最右边的字符,具体取决于方向(因为它将是内存中的最后一个字符)。

于 2013-06-12T21:47:39.487 回答