正则表达式解析除列入黑名单的术语之外的列表项

时间:2017-11-10 01:36:37

标签: java regex

我正在尝试构建一个匹配列表的单一正则表达式,只要它包含列表中的特定项目并返回列表中的所有其他项目,但匹配的项目。“ p>

例如:有了这个列表,我希望在 fruit 上匹配,但只返回 apple orange banana

apple, fruit, orange, banana

我正在尝试各种变体:

\b(?:fruit)\b|[^,\s][^\,]*[^,\s]*

这是一个Java正则表达式实现,但假设我无法访问运行实际正则表达式的代码。

3 个答案:

答案 0 :(得分:1)

正则表达式可能不是最好的工具,但将项目加载到列表中可能会更好。在下面的代码段中,我将您的CSV项目/水果列表转换为正式列表。有了该列表,就可以很容易地确定某个项目是否存在。如果找到fruit,那么我们可以返回列表减去该项目,否则返回null

public List<String> getItems(String input, String match) {
    String[] array = input.split(",\\s*");
    List<String> list = Arrays.asList(array);
    if (list.contains(match)) {
        return list.remove(match);
    }
    else {
        return null;
    }
}

String fruits = "apple, fruit, orange, banana";
List<String> result = getItems(fruits, "fruit");

答案 1 :(得分:1)

除非我遗漏了某些内容,否则您应该只需匹配(.*)\bfruit\b(?:, )?(.*)并替换为\1\2

答案 2 :(得分:0)

enter image description here我准备了以下正则表达式,适用于列表中元素的任何位置。

(.*)apple(,\s)(.*)|(.*)(,\s)apple(.*)

然后你必须使用以下反向引用来构建结果列表

$1$3$4$6

当然每次使用正则表达式时,您都必须通过必须从列表中删除的元素更改&#34; apple&#34; ,为此目的创建一个存储的变量必须删除的元素,并通过连接以下元素动态构造正则表达式:

"(.*)" + elementToBeRemoved + "(,\s)(.*)|(.*)(,\s)" + elementToBeRemoved + "(.*)"

我尝试过香蕉,苹果,水果和橙色,它的效果非常好!!!