1

我想获取 2 个单词之间的所有文本(第一个单词是固定的 [One] 但第二个单词是 2 个单词 [Two] 或 [Three] 中的一个)。

注意:: 找到的文本和第二个单词之间可能有也可能没有空格。例如:

One     i am  
here
Two
i am fine 
One     i am 
here 
 Two
i am fine 
One     i am  
here
Three
i am fine 
One     i am  
here 
 Two
i am fine

我发现的是

Pattern p = Pattern.compile("(?<=\\bOne\\b)(.*?)(?=\\bTwo\\b)");

但这不正确,因为它需要完整的单词。

“二”有效。
“fineTwo”无效。

4

3 回答 3

3

它只匹配完整的单词,因为您使用单词边界\b。如果要接受“fineTwo”,则删除第一个边界

Pattern p = Pattern.compile("(?<=\\bOne\\b)(.*?)(?=Two\\b)");

要接受“二”或“三”作为结尾,请使用交替:

Pattern p = Pattern.compile("(?<=\\bOne\\b)(.*?)(?=(?:Two|Three)\\b)");
于 2013-04-12T06:21:43.267 回答
0

getTextBetweenTwoWords 方法可能有效。

public static void main(String[] args)
{
    String firstWord = "One";
    String secondword = "Two";
    String text = "One Naber LanTwo";
    System.out.println(getTextBetweenTwoWords(firstWord, secondword, text));
}
private static String getTextBetweenTwoWords(String firstWord, String secondword, String text)
{
    return text.substring(text.indexOf(firstWord) + firstWord.length(), text.indexOf(secondword));
}
于 2013-04-12T06:28:39.290 回答
0

尝试这个:

for(String parseOne : Input.split("One"))
  for (String parseTwo : parseOne.split("Two"))
    for (String parseThree : parseTwo.split("Three"))
       System.out.println(parseThree.replace("One", "").replace("Two", "").replace("Three", "").trim());
于 2013-04-12T06:18:26.437 回答