有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java对如何准确使用正则表达式感到困惑?

所以我一直在研究很多关于正则表达式的搜索,但是我仍然很困惑如何设置它们。我遇到的问题是,我试图转换输入文件中给定的文本:

(42, 10) d (23, 1) (123, 4) (32, 10) d (12, 9)

这样我就可以将它粘贴到一个字符串数组中,它如下所示:

[42, 10, d, 23, 1, 123, 4, 32, 10, d, 12, 9] 

有什么建议吗
起初我尝试使用分隔符来去掉括号和逗号,但是,分隔符将每个值放在一整行上,很遗憾,这不是我的目标。我基本上是试图忽略这些特殊字符,这样我就可以将例如42分配给int a,10分配给int b


共 (2) 个答案

  1. # 1 楼答案

    你用什么语言?编辑:nvm我看到你在使用Java。前提仍然存在,关于如何做,我将在Java版本的基础上再与您联系

    在perl中,这将非常简单

    use Data::Dumper;
    
    my $var = "(42, 10) d (23, 1) (123, 4) (32, 10) d (12, 9)";
    
    $var =~ s/\)/,/g;
    $var =~ s/\(//g;
    $var =~ s/d/d,/g;
    $var =~ s/\s*//g;
    my @arr = split /,/, $var;
    print Dumper \@arr;
    

    Java版本:

        String content = "(42, 10) d (23, 1) (123, 4) (32, 10) d (12, 9)";
        String[] split = null;
    
        split = content.replace(")",",").replace("(","").replace("d","d,").replace(" ","").split(",");
    
        for (String a : split)
        {
            System.out.println(a);
        }
    

    虽然我猜这并不能完全回答你的问题,因为它不使用正则表达式。它只使用替换和拆分

  2. # 2 楼答案

    如果您真的需要正则表达式,那么当您的数据更复杂时,这种方法效果更好

    注意:我只处理字母数字数据,因为d似乎没有什么特殊的含义

    Pattern p = Pattern.compile("[A-Za-z0-9]+");
    Matcher m = p.matcher("(42, 10) d (23, 1) (123, 4) (32, 10) d (12, 9)");
    
    String delim = ",";
    StringBuffer sb = new StringBuffer("[");
    while (m.find()) {
        sb.append(m.group()).append(delim);
    }
    sb.setLength(sb.length() - delim.length());
    System.out.println(sb.append("]").toString());
    

    输出

    [42,10,d,23,1,123,4,32,10,d,12,9]
    

    如果您确实希望保留该数据,请使用List<String>