正则表达式从字符串中获取第三个元素

时间:2018-12-10 16:25:11

标签: java regex

您好,我无法获取字符串的第三个元素(F604080)

<sourceDocumentId>AX02_APF604_F604080</sourceDocumentId>

我已经尝试过使用这种正则表达式和变体,但是我可以设法获得 F604080。

(?<=\w+_)\w+(?=\<)

(?<=\w+_\w+_)\w+(?=\<)

....

任何帮助将不胜感激。 谢谢。

4 个答案:

答案 0 :(得分:1)

  1. 使用regex可以使用类似>\w+_\w+_(\w+)<\/

    String str = "<sourceDocumentId>AX02_APF604_F604080</sourceDocumentId>";
    String code = null;
    Matcher m = Pattern.compile(">\\w+_\\w+_(\\w+)</").matcher(str);
    if (m.find()) {
        code = m.group(1);
    }
    
  2. 只需使用substring()操作

    String code = str.substring(str.lastIndexOf('_') + 1, str.lastIndexOf('<'));
    
  3. 如果稍后使用更多元素解析XML,则可以使用类似Java DOM Parser XML的方法,但这并不是最佳选择,因为您只有一个元素

答案 1 :(得分:1)

您不需要回头或向前看,只需使用此简单的正则表达式,

.*_(\w+)

并捕获第1组。

Java代码

public static void main(String[] args) {
    String s = "<sourceDocumentId>AX02_APF604_F604080</sourceDocumentId>";
    Pattern p = Pattern.compile(".*_(\\w+)");
    Matcher m = p.matcher(s);

    if (m.find()) {
        System.out.println(m.group(1));
    } else {
        System.out.println("Didn't match");
    }
}

根据需要打印此内容。

F604080

答案 2 :(得分:0)

您可以使用“ _”作为分隔符并使用第3个元素来解析字符串吗?

答案 3 :(得分:0)

您的两个正则表达式似乎都与给定的字符串匹配。

无论如何,您可能对此更加具体:

^(?:<\w+>)(?:\w+)_(?:\w+)_(\w+)(?:<\/\w+>)$

请确保输入的内容是您认为的字符串,并且此后没有给出其他文本。