如何仅在分隔符之间提取数字?

时间:2017-05-30 06:48:26

标签: java regex

我想提取两个分隔符之间找到的所有数字。 例: 测试555-2468-123 提取的理想结果: 555 2468 我尝试使用正则表达式如下:[\ d +] +。这至少给了我一个块中的所有数字。但是,如何添加限制,数字必须是前缀和后缀 - 字符?

2 个答案:

答案 0 :(得分:10)

您可以在正则表达式中使用外观,因为它涉及重叠匹配:

(?<=-)\d+(?=-)

在Java代码中:

final Pattern p = Pattern.compile("(?<=-)\\d+(?=-)");

RegEx Demo

  • (?<=-) - 正面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);