Java重复正则表达式

时间:2012-11-30 15:23:29

标签: java regex expression

我有以下RegEx,它应匹配,例如括号中的一些ID:

[swpf_02-7679, swpf_02-7622, ...]

Pattern p = Pattern.compile("[\\[\\s]*?[a-z]{1,8}[0-9]*?_[0-9]{2,}\\-[0-9]+[\\s]*?\\]");

现在的目标是将此模式与“拆分”合并为“,”以适应字符串[swpf_02-7679, swpf_02-7622],而不仅仅是[swpf_02-7679],就像上面发布的RegEx一样。

有人能给我一个暗示吗?

6 个答案:

答案 0 :(得分:1)

做你想做的最简单的方法我认为只需删除前后的'['和']'(使用String.subString()),然后用逗号分隔String.split()并在每个单独的字符串上使用正则表达式返回(当然,调整正则表达式以删除括号)。

答案 1 :(得分:1)

只需从字符串中删除[],然后split

删除,

答案 2 :(得分:1)

好吧,假设你想要id的那些位是“swpf_02-7622”,然后在逗号上拆分,然后循环遍历遗骸,随时修剪。有点像

List<String> cleanIds = new ArrayList<String>();
for(String id : ids.split(","))
    cleanIds.add(id.trim());

如果你想摆脱“swpf_”位,那么id.substring(5)。

最后,为了摆脱方括号,使用id.startsWith('[')和id.endsWith(']')。

答案 3 :(得分:0)

为什么不使用Java StringTokenizer类,然后只使用你得到的令牌上的正则表达式?您可以对它们进行后处理以包含您需要的括号或稍微修改正则表达式。

答案 4 :(得分:0)

正如@was和@garyh已经提到过最简单的方法是删除[],然后使用`String.split(“\ s *,\ S *”)拆分列表,然后使用你的匹配每个成员图案。

您还可以使用起始位置作为上一次迭代的结束位置多次匹配您的字符串:

模式p = .... //捕获括号中的模式() Matcher m = p.matcher(str);

for (int start = 0; m.find(start); start = m.end()) {
    String element = m.group(1);
    // do what you need with the element.
}

答案 5 :(得分:0)

如果您只想提取列表中的所有代码,可以使用此正则表达式:

[^,\s\[\]]+

从以下字符串中获取所有匹配项:

[swpf_02-7679, swpf_02-762342, swpf_02-7633  ,   swpf_02-723422]

会给你以下结果:

swpf_02-7679
swpf_02-762342
swpf_02-7633
swpf_02-723422
相关问题