我正在尝试构建一个匹配列表的单一正则表达式,只要它包含列表中的特定项目并返回列表中的所有其他项目,但匹配的项目。“ p>
例如:有了这个列表,我希望在 fruit 上匹配,但只返回 apple , orange 和 banana :
apple, fruit, orange, banana
我正在尝试各种变体:
\b(?:fruit)\b|[^,\s][^\,]*[^,\s]*
这是一个Java正则表达式实现,但假设我无法访问运行实际正则表达式的代码。
答案 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)