我收到了阿拉伯语音译服务的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":"
和"
之间获得整个群组?
答案 0 :(得分:4)
你正在重复这个小组。你的基本结构就像
(matchCharacter)*?
因此,组1
仅捕获一个字符而不是整个字符串。每次再次使用该组时,将覆盖先前的捕获。这就是为什么你得到最后一个字符(由于RTL写法,这是最左边的字符)。
只是,将整个重复包装在一个组中,并使重复的部分不被捕获:
"\"r\":\"((?:\\P{M}\\p{M}*)*?)\""
无论RTL还是LTR写入,这都适用。只有,如果你使用的是最初的模式,你将获得最左边或最右边的字符,具体取决于方向(因为它将是内存中的最后一个字符)。