0

这是代码:

String Str ="Animals \n" +
                "Dog \n" +
                "Cat \n" +
            "Fruits \n" +
                "Apple \n" +
                "Banana \n" +
                "Watermelon \n" +
            "Sports \n" +
                "Soccer \n" +
                "Volleyball \n";

Str基本上有3个类别(动物,水果,运动)。他们每个人都在单独的行中。使用正则表达式,我如何找到水果的内容,这会给我这样的输出:

Apple
Banana
Watermelon

我也想要一个与您的答案相符的解释,以便我更好地理解这个问题。

谢谢。:)

4

2 回答 2

1

假设您要提取单词“Fruits”和单词“Sports”之间的文本,您可以使用带有捕获组的正则表达式。这样,如果字符串匹配,那么您仍然必须提取包含所需文本的组。

例如:

Pattern p = Pattern.compile("Fruits(.*?)Sports", Pattern.DOTALL);
// The string "Fruits" ------^     ^    ^        ^
// Capture everything in between --^    ^        ^
// The string "Sports" -----------------^        ^
// This tells the regex to treat newlines        ^
//   like normal characters ---------------------^

请看下面的铁路图

图像的铁路图

或者,您可以使用更高级的正则表达式,使用正向前瞻和后瞻。这意味着您可以让您的正则表达式仍然在单词“Fruit”和“Sports”之间查找文本,但不将这些字符串本身视为匹配的一部分。

Pattern p = Pattern.compile("(?<!Fruits).*?(?=Sports)", Pattern.DOTALL);
于 2013-03-01T01:27:43.640 回答
0

我会先将字符串拆分成一个单词String[] words = Regex.Split(Str, "\n");数组words

于 2013-03-01T01:13:54.093 回答