【问题标题】:Java Regex: replace with capturing groupJava 正则表达式:替换为捕获组
【发布时间】:2014-06-19 04:59:51
【问题描述】:

我有一个这样的字符串:

123456-1/1234/189928/2323 (102457921)

我想得到102457921。如何使用正则表达式实现它?

我试过了:

"123456-1/1234/189928/2323 (102457921)".replaceAll("(\\.*\()(\d+)(\))","$2");

但它不起作用。有什么提示吗?

【问题讨论】:

  • 用空格分割并去掉大括号?
  • 当然可以,但我想要一个正则表达式解决方案。

标签: java regex capturing-group


【解决方案1】:

怎么样

"123456-1/1234/189928/2323 (102457921)".replaceAll(".*?\\((.*?)\\).*", "$1");

【讨论】:

  • .*? 是什么意思?
  • .*一样,只是非贪婪。你可以阅读更多here
【解决方案2】:

好吧,你可以这样做:

"123456-1/1234/189928/2323 (102457921)".replaceAll(".*\((.+)\)","$1");

【讨论】:

  • @sshashank124,是的。将+ 更改为*
【解决方案3】:

你可以这样做:

"123456-1/1234/189928/2323 (102457921)".replaceAll(".*?\(([^)]+)\)","$1");

【讨论】:

    【解决方案4】:

    “双重”replaceAll 正则表达式简化了一个怎么样

    "123456-1/1234/189928/2323 (102457921)".replaceAll(".*\\(", "").replaceAll("\\).*", "");
    

    【讨论】:

      【解决方案5】:

      你可以试试这样的:

      var str = '123456-1/1234/189928/2323 (102457921)';
          console.log(str.replace(/[-\d\/ ]*\((\d+)\)/, "$1"));
          console.log((str.split('('))[1].slice(0, -1));
          console.log((str.split(/\(/))[1].replace(/(\d+)\)/, "$1"));
          console.log((str.split(/\(/))[1].substr(-str.length - 1, 9));
          console.log(str.substring(str.indexOf('(') + 1, str.indexOf(')')));
      

      在其他情况下,您必须熟悉输入数据的细节才能生成合适的正则表达式。

      【讨论】:

        猜你喜欢
        • 2010-11-19
        • 1970-01-01
        • 2010-11-19
        • 2020-09-14
        • 2020-08-24
        • 2019-01-27
        • 1970-01-01
        • 2013-07-31
        • 1970-01-01
        相关资源
        最近更新 更多