4

代码:

import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class Regex {
public static void main(String[] args) {
    String data = ". Shyam and you. Lakshmi and you. Ram and you. Raju and you. ";
    Pattern pattern = Pattern.compile("\\.\\s(.*?and.*?)\\.\\s");
    Matcher matcher = pattern.matcher(data);
    while (matcher.find()) {
        System.out.println(matcher.group(1));
    }

}
}

预期输出:

Shyam and you
Lakshmi and you
Ram and you
Raju and you

但我得到的输出是:

Shyam and you
Ram and you

请纠正我。

4

2 回答 2

6

您没有得到相邻的匹配,因为您正在匹配".\\s"上一个模式中的下一个模式。所以,他们不会再匹配了。

您应该使用环视:

Pattern.compile("(?<=\\.\\s)(.*?and.*?)(?=\\.\\s)");

环顾四周是 0 长度的断言。他们不会消耗字符,而只是检查模式是否存在,无论是向前还是向后。


参考:

于 2013-08-26T18:21:57.503 回答
0

我不是正则专家,但看起来你的模式匹配两个 .,而每个句子之间只有一个。

于 2013-08-26T18:22:21.840 回答