【问题标题】:Splitting a comma separated string and discarding some values in the string拆分逗号分隔的字符串并丢弃字符串中的某些值
【发布时间】:2013-01-03 20:37:18
【问题描述】:

给定以下字符串:

423545(50),[7568787(50)],53654656,2021947(50),[021947],2021947(50),[8021947(50)]

我想拆分它并将内容放入一个数组中,不包括方括号和括号中的数字 - 即结果应该是一个包含以下内容的数组。

{423545,7568787,53654656,2021947,021947,2021947,8021947}

到目前为止,我的尝试只有在没有方括号的情况下才有效:

String str = "342398789, [233434],423545(50),[7568787(500)],53654656,2021947(50),[021947],2021947(150),[8021947(50)]";
String[] listItems = str.split("(\\(\\d+\\))?(?:,|$)")

如何更新上述正则表达式以提取方括号中的数字?

我试图提取的字符串是数据库行的标识符,所以我需要提取它们来检索数据库行。

【问题讨论】:

    标签: java regex string


    【解决方案1】:

    你可以试试这个方法

    String str = "[342398789], [233434] ,423545(50),[7568787(500)],"
            + "53654656,2021947(50),[021947],2021947(150),[8021947(50)]";
    String[] listItems = str.replaceFirst("^\\[", "").split(
            "(\\(\\d+\\))?\\]?(\\s*,\\s*\\[?|$)");
    
    System.out.println(Arrays.toString(listItems));
    

    输出

    [342398789、233434、423545、7568787、53654656、2021947、021947、2021947、8021947]

    【讨论】:

    • 谢谢。这几乎可以工作,但忽略了这个字符串的第一个方括号 "[423545(50)],7568787(50),[53654656],2021947(50)"
    • @ziggy 你能检查更新版本吗?我决定从开头删除[,以避免拆分后开始时出现空字符串。
    • 表达式中间为什么要加分号?
    • @ziggy 我的错误,复制粘贴错误,现在可以了。
    【解决方案2】:

    试试这个方法:

    String str = "342398789, [233434],423545(50),[7568787(500)],53654656,2021947(50),[021947],2021947(150),[8021947(50)]";
    String[] listItems = str.replaceAll("\\(\\d+\\)","")replaceAll("\\[","").replaceAll("\\]","").split(",");
    

    【讨论】:

    • 您忘记在第一次替换时在d+ 之前添加\\,在第二次replaceAll 方法之前添加.。顺便提一句。您可以在正则表达式(|)中使用“或”并仅使用一个 replaceAll :)
    猜你喜欢
    • 2018-12-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-03-07
    • 1970-01-01
    • 2017-01-05
    • 2012-05-24
    相关资源
    最近更新 更多