-1

我有以下 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。

有人可以给我一个提示吗?

4

6 回答 6

1

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

于 2012-11-30T15:29:47.533 回答
1

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

于 2012-11-30T15:31:48.483 回答
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(']') 。

于 2012-11-30T15:33:24.627 回答
0

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

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

Pattern 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.
}
于 2012-11-30T15:40:14.270 回答
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
于 2012-11-30T18:07:33.550 回答
0

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

于 2012-11-30T15:28:17.840 回答