【问题标题】:Regular expression get the third element from a string正则表达式从字符串中获取第三个元素
【发布时间】:2018-12-10 16:25:10
【问题描述】:

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

<sourceDocumentId>AX02_APF604_F604080</sourceDocumentId>

我已经尝试过这个正则表达式和变体,但我可以设法得到 F604080。

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

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

....

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

【问题讨论】:

  • 不要使用正则表达式扫描标记。您想使用专用解析器扫描 XML,然后仅对值使用正则表达式。之后,如果它是一致的,您可以在出现_ 字符的最后一个索引处获取一个子字符串,+ 1(即可以说您不需要正则表达式)。
  • Java 不支持像(?&lt;=\w+_) 这样的无限后视。您的第一个正则表达式可以使用 quantifier demo 的有限后视来工作,但如果您可以使用解析器,那就更好了。

标签: java regex


【解决方案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】:
    1. 使用regex 你可以使用&gt;\w+_\w+_(\w+)&lt;\/ 之类的东西

      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之类的东西,但这不是最好的选择,因为你只有一个元素

    【讨论】:

      【解决方案3】:

      你能用“_”作为分隔符解析字符串并取第三个元素吗?

      【讨论】:

        【解决方案4】:

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

        无论如何,你可以对这个更具体一点:

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

        确保输入是您认为的字符串,之后没有给出其他文本。

        【讨论】:

          猜你喜欢
          • 2021-09-03
          • 2021-02-23
          • 1970-01-01
          • 1970-01-01
          • 2017-06-07
          • 2011-11-13
          • 1970-01-01
          • 2014-04-09
          • 1970-01-01
          相关资源
          最近更新 更多