解读这个正则表达式

时间:2015-08-19 12:07:09

标签: java regex string split

我回到了几个月前我正在做的一个项目,我发现的一个问题是当我需要提取String的某个部分时。 String使用了paranthesis和quotationmarks,所以我不能像普通文本一样拆分它。

String的外观示例:

  

Word_Object(" id"):preword:subword

现在说我想只抓住(" id")之后的内容:

  

' preword:子字'

我发现正则表达式帮助了我,并且花了很长时间才找到适用于我想要的示例。我不得不解决这个问题,因为我试图找到关于如何了解这个极其复杂的系统的来源,但我在那方面做得很难。解决它的正则表达式如下所示:"Word_Object(\\(\"" + "id" + "\")\\): "

我满足于它似乎工作,但现在当我回到项目并尝试它时,我试图提取一个使用下划线_和下划线的单词( s)被遗漏了。

示例,使用正则表达式(使用完整行)Word_Object("id"): preword:subword_underscoreword拆分文本idSplit = subTemp.split("Word_Object(\\(\"" + "id" + "\")\\): ");只会返回:preword:subword而不是想要的preword:subword_underscoreword

我是否以某种方式在这个正则表达式中指示它在第二个特殊字符后忽略任何内容(因为它确实接受:但显然_会破坏所有内容)?

4 个答案:

答案 0 :(得分:0)

public static void main(String[] args) {
    final String[] split = "Word_Object(\"id\"): preword:subword_underscoreword".split("Word_Object(\\(\"" + "id" + "\")\\): ");
    System.out.println("split = " + split[1]);
}

导致

split = preword:subword_underscoreword

答案 1 :(得分:0)

正如评论中所提到的那样,没有必要使用.replace()它会给你一个字符串数组而不是确切的字符串数组,只需使用带有空字符串的 String str = "Word_Object(\"id\"): preword:subword_underscoreword"; String str2 = str.replace("Word_Object(\"id\"): ", ""); ,yopu就会得到你需要的结果:

preword:subword_underscoreword

a DEMO 会在输出中为您提供{{1}}。

答案 2 :(得分:0)

由于您可能需要保持id动态,因此这是一个replaceAll解决方案:

String s = "Word_Object(\"id\"): preword:subword_underscoreword";
System.out.println(s.replaceAll("Word_Object(\\(\"" + "id" + "\")\\):\\s*",""));

请参阅IDEONE demo

输出:preword:subword_underscoreword

答案 3 :(得分:0)

您应该匹配而不是替换或拆分:

private static final Pattern PRE_SUB_WORD_EXTRACT = Pattern.compile("Word_Object\\(\"\\w+\"\\): (\\w+):(\\w+)");

public static void main(String[] args) {
    String test = "Word_Object(\"id\"): preword:subword_underscorewordusing";
    Matcher testMatcher = PRE_SUB_WORD_EXTRACT.matcher(test);
    if (!testMatcher.matches()) {
        System.out.println("Bollocks");
        System.exit(1);
    }
    System.out.printf("%s : %s%n", testMatcher.group(1), testMatcher.group(2));
}