【问题标题】:java -split xpath-string into chunks (seperator [.+] ???)java -split xpath-string 成块(分隔符 [.+] ???)
【发布时间】:2018-03-13 05:07:02
【问题描述】:

我得到了几个必须拆分的 XPath 表达式。 示例

NODEA[NODEA1/NODEA11][NODEA2/NODEA21][NODEA3/NODEA31]/NODEB

方括号中的内容可以乘以倍。 我需要一个看起来像的数组

NODEA[NODEA1/NODEA11]
NODEA[NODEA2/NODEA21]
NODEA[NODEA3/NODEA31]
NODEA/NODEB

我不知道正则表达式的外观。 我想我必须从右到左开始阅读。 除了要删除的实际方括号帽外,方括号中的所有内容? 也许我错了,有更好的解决方案。

由于我不经常使用正则表达式,因此不胜感激。

非常感谢 问候 马里奥

【问题讨论】:

  • 对不起,这不是 StackOverflow 的工作方式。请拨打tour,访问help center 并阅读How to Ask,了解如何有效地使用本网站。我们不为你写代码,希望你自己努力解决问题。
  • 嗨吉姆,对不起,我不明白。我的问题有什么问题?
  • 嗨,吉姆,对不起。但我不知道如何开始解决我的问题?由于我不是正则表达式专家,因此我写道“感谢任何帮助”。我没想到会有任何最终代码。问候马里奥
  • 我尝试了String[] split = str.split("(?<=])");,但我得到了结果:NODEA[NODEA1/NODEA11] [NODEA2/NODEA21] [NODEA3/NODEA31] /NODEB,这接近我的要求。
  • 我试过了:String[] split = str.split("(?<=])"); 但我得到了结果:NODEA[NODEA1/NODEA11] [NODEA2/NODEA21] [NODEA3/NODEA31] /NODEB 接近我的要求。任何人都可以请。帮忙?

标签: java regex string split


【解决方案1】:

对于您给定的示例,您可以通过例如使用alternation 来获取不同的部分:

NODEA|\[[^]]+]|\/NODEB

那会匹配

  • NODEA
  • |或者
  • \[[^]]+] 匹配例如[NODEA1/NODEA11],通过匹配开口[,然后不匹配],然后匹配]
  • |或者
  • NODEB

您可以遍历匹配项并将这些部分添加到 ArrayList 之类的集合中。

然后删除并捕获该列表的第一个条目String nodeA,这将是NODEA,其余部分保持不变。

对于集合中的其余部分,您希望在前面加上 nodeA 的值。然后,您可以遍历集合并将nodeA 添加到集合中的所有条目:

String regex = "NODEA|\\[[^]]+]|\\/NODEB";
String string = "NODEA[NODEA1/NODEA11][NODEA2/NODEA21][NODEA3/NODEA31]/NODEB";

Pattern pattern = Pattern.compile(regex);
Matcher matcher = pattern.matcher(string);
ArrayList<String> ar = new ArrayList<String>();

while (matcher.find()) {
    ar.add(matcher.group(0));
}

String nodeA = ar.remove(0);

for (int i = 0; i < ar.size(); i++) {
    ar.set(i, nodeA + ar.get(i));
}

Demo Java

【讨论】:

    猜你喜欢
    • 2020-10-21
    • 1970-01-01
    • 2014-02-24
    • 1970-01-01
    • 2013-02-01
    • 1970-01-01
    • 2013-11-26
    • 1970-01-01
    • 2017-06-17
    相关资源
    最近更新 更多