在使用正则表达式的java中,如何从字符串中的某个位置查找最后3个单词

在使用正则表达式的java中,如何从字符串中的某个位置查找最后3个单词,java,regex,pattern-matching,Java,Regex,Pattern Matching,在使用正则表达式的java中,如何从字符串中的某个位置找到最后3个单词?例如,我有一个字符串 它位于Bara Imambara附近,在连接道路上矗立着一个称为Rumi Darwaza的宏伟大门。这座建筑也被称为灯塔宫殿,因为它的装饰和枝形吊灯在特殊的节日期间,如穆哈拉姆 我想找到“Rumi Darwaza”之前的最后3个单词,我已经找到了,并且在字符串中的位置为50。首先,使用子字符串切掉字符串中不需要的部分。然后应用一个正则表达式,捕获字符串结尾前的最后三个单词: "\\s(\\S+)\\s(

在使用正则表达式的java中,如何从字符串中的某个位置找到最后3个单词?例如,我有一个字符串

它位于Bara Imambara附近,在连接道路上矗立着一个称为Rumi Darwaza的宏伟大门。这座建筑也被称为灯塔宫殿,因为它的装饰和枝形吊灯在特殊的节日期间,如穆哈拉姆


我想找到“Rumi Darwaza”之前的最后3个单词,我已经找到了,并且在字符串中的位置为50。

首先,使用
子字符串
切掉字符串中不需要的部分。然后应用一个正则表达式,捕获字符串结尾前的最后三个单词:

"\\s(\\S+)\\s(\\S+)\\s(\\S+)\\s*$"
这将把最后三个单词分为正则表达式的三个捕获组

String str = "It is situated near the Bara Imambara and on the connecting road stands an imposing gateway known as Rumi Darwaza. The building is also known as the Palace of Lights because of its decorations and chandeliers during special festivals, like Muharram";
int index = str.indexOf("Rumi Darwaza");
Matcher m = Pattern.compile("\\s(\\S+)\\s(\\S+)\\s(\\S+)\\s*$").matcher(str.substring(0, index));
if (m.find() && m.groupCount() == 3) {
    for (int i = 1 ; i <= 3 ; i++) {
        System.out.println(m.group(i));
    }
}

只是为了确保:您的意思是称为“”的网关,对吗?是的“网关”称为“我想您甚至可以将后面的
\\s*$
替换为
\\sRumi Darwaza.*$
,而不需要做子字符串:
”\\s*(\\s+)\\s+\\s(\\s+)\\s+\\s+\\sRumi Darwaza.$”
@Gus非常感谢您的提醒!你是绝对正确的,我决定将这个过程分为两个步骤,假设在我们瞄准的三个词之前可能有其他“标记”。
gateway
known
as