2

我想评估类似于以下的表达式:

这是蓝色的街道

您可以使用正则表达式来确定颜色,如下所示:

.? (青色 | 绿色 | 红色 | 蓝色)

到目前为止一切顺利,但是,我如何确定导致颜色的对象?也就是说,在这种情况下,我想回收“Street”这个词,但它可以是“Car”、“Arrow”或任何其他名词。

简而言之,是否有可能构造一个正则表达式,在这种情况下,一旦找到特定点(数学)的颜色,就可以得到最后一个单词,它对应于应用颜色的对象,或者是相同的,正则表达式找到匹配之前的单词?

4

3 回答 3

2

以下正则表达式应该可以工作:

(\w+)\s+(blue|green|cyan)

颜色匹配之前的单词将在捕获组 1 中。

爪哇测试:

Pattern p = Pattern.compile("(\\w+)\\s+(blue|green|cyan)");
Matcher matcher = p.matcher("This is the street blue");
if(matcher.find()) {
    System.out.println(matcher.group(1));
}
于 2012-09-25T13:49:37.310 回答
0

使用单词边界来获取颜色之前的单词(使用前瞻):

/\b.+\b(?=\s+(cyan|green|red|blue))/
于 2012-09-25T13:53:31.917 回答
0

这个表达式是最适合您正在寻找的表达式,肯定需要进一步的数据处理,但它确实很有用。

谢谢大家的意见

于 2012-09-25T14:02:36.090 回答