使用Java中的regex在特殊字符(+)的特定位置拆分字符串

时间:2017-02-24 18:24:21

标签: regex split

我想将以下字符串拆分为+,但我无法成功获取正确的正则表达式。

String input = "SOP3a'+bEOP3'+SOP3b'+aEOP3'";

我希望得到像这样的结果

 [SOP3a'+bEOP3', SOP3b'+aEOP3']

在某些情况下,我可能会有以下字符串

c+SOP2SOP3a'+bEOP3'+SOP3b'+aEOP3'EOP2

应该拆分为

[c, SOP2SOP3a'+bEOP3'+SOP3b'+aEOP3'EOP2] 

我尝试了以下正则表达式,但它不起作用。

input.split("(SOP[0-9](.*)EOP[0-9])*\\+((SOP)[0-9](.*)(EOP)[0-9])*");

感谢任何帮助或建议。

谢谢

2 个答案:

答案 0 :(得分:1)

您真的需要使用MATCH (u1:Person {id: "1234"}), (u2:Person {id: "5678"}) MERGE (u1)-[r:KNOWS]->(u2) ON CREATE SET r.duration = 12, r.count = 1 ON MERGE SET r.duration = 12, r.count = r.count + 1 RETURN r 方法吗? 规则是什么?他们不清楚。

无论如何,考虑到你提供的正则表达式,我只删除了一些不必要的组,但我找到了你要找的东西,但是,我只是加入了匹配,因为分裂会生成一些空元素。

$ ./manage.py migrate --database=<db_name_1>
$ ./manage.py migrate --database=<db_name_2>

答案 1 :(得分:1)

您可以使用以下 regex 来匹配字符串,并使用捕获的组替换它,您可以获得预期的结果:

(?m)(.*?)\+(SOP.*?$)

请参阅demo / explanation

以下是适用于您的Java代码:

public static void main(String[] args) {
    String input = "SOP3a'+bEOP3'+SOP3b'+aEOP3'";
    String pattern = "(?m)(.*?)\\+(SOP.*?$)";

    Pattern regex = Pattern.compile(pattern);

    Matcher m = regex.matcher(input);
    if (m.find()) {
        System.out.println("Found value: " + m.group(0));
        System.out.println("Found value: " + m.group(1));
        System.out.println("Found value: " + m.group(2));
    } else {
        System.out.println("NO MATCH");
    }
}

m.group(1)m.group(2)是您要查找的值。