答案 0 :(得分:10)
您可以在正则表达式中使用外观,因为它涉及重叠匹配:
(?<=-)\d+(?=-)
在Java代码中:
final Pattern p = Pattern.compile("(?<=-)\\d+(?=-)");
(?<=-)
- 正面Lookbehind断言前一个位置有一个连字符(?=-)
- 断言下一个位置有连字符的正面前瞻答案 1 :(得分:0)
这是一个使用少量正则表达式并且(我猜)更直接的解决方案。
String str = "test-555-2468-123";
// converting the split array into an array list
ArrayList<String> list = new ArrayList<>();
Arrays.stream(str.split("\\-")).forEach(list::add);
// ensure that there must be a "-" before and after by removing the first and last element
list.remove(0);
list.remove(list.size() - 1);
// filter the elements that contains only numbers
list.stream().filter(x -> Pattern.compile("\\d+").matcher(x).matches()).forEach(System.out::println);