如何使用Reg-ex找到一组单词?

时间:2013-03-01 00:46:18

标签: java regex

以下是代码:

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

Str基本上有3个类别(动物,水果,运动)。他们每个人都分开排列。使用正则表达式,如何找到Fruits的内容,这将给出如下输出:

Apple
Banana
Watermelon

我想要一个与你的答案一致的解释,这样我就能更好地理解这个问题。

感谢。 :)

2 个答案:

答案 0 :(得分:1)

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

例如:

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 ---------------------^

请参阅下面的railroad diagram

a railroad diagram of the image

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

Pattern p = Pattern.compile("(?<!Fruits).*?(?=Sports)", Pattern.DOTALL);

答案 1 :(得分:0)

我首先将字符串拆分为单词数组(String[] words = Regex.Split(Str, "\n");),然后循环遍历words数组,在进行时将元素添加到适当的类别,在类别之间切换为你看到了标题。

相关问题