Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 正则表达式解析多行数据_Java_Regex_String_Parsing_Multiline - Fatal编程技术网

Java 正则表达式解析多行数据

Java 正则表达式解析多行数据,java,regex,string,parsing,multiline,Java,Regex,String,Parsing,Multiline,我有一个文件中的以下数据,我想看看是否可以在这里进行正则表达式解析 Name (First Name) City Zip John (retired) 10007 Mark Baltimore 21268 .... .... Avg Salary 70000 100% 姓名(名)城市邮编 约翰(退休)10007 马克·巴尔的摩21268 .... .... 平均工资 70000

我有一个文件中的以下数据,我想看看是否可以在这里进行正则表达式解析

Name (First Name) City Zip John (retired) 10007 Mark Baltimore 21268 .... .... Avg Salary 70000 100% 姓名(名)城市邮编 约翰(退休)10007 马克·巴尔的摩21268 .... .... 平均工资 70000 100% 它不是一个大文件,文件中的所有数据都可以在字符串对象中使用新行字符(\n)(String data=“文件中的数据”)


  • 我试图得到姓名,城市,邮政编码,然后工资,百分比的细节
  • ()中的数据被视为名称字段的一部分
  • For Name字段空间被视为有效,其他字段没有空间
  • “平均工资”仅在文件末尾可用

  • 通过Java中的正则表达式解析是否容易做到这一点?

    如果文本文件是空间对齐的,您可以(可能应该)根据字符数提取字段。因此,您将每行中的第一个
    n
    字符作为名字,下一个
    m
    字符作为城市,依此类推

    这是一个使用上述方法提取的代码,通过自动计算字段的字段长度,假设我们知道标题

    String data = "data from the file";
    
    // This is just to ensure we have enough space in the array
    int numNewLines = data.length()-data.replace("\n","").length();
    String[][] result = new String[numNewLines][3];
    String[] lines = data.split("\n");
    int avgSalary = 0;
    int secondFieldStart = lines[0].indexOf("City");
    int thirdFieldStart = lines[0].indexOf("Zip");
    for(int i=1; i<lines.length; i++){
        String line = lines[i].trim();
        if(line.equals("Avg Salary")){
            avgSalary = Integer.parseInt(lines[i+1].substring(0,secondFieldStart).trim());
            break;
        }
        result[i-1][0] = line.substring(0,secondFieldStart).trim(); // First Name
        result[i-1][1] = line.substring(secondFieldStart,thirdFieldStart).trim(); // City
        result[i-1][2] = line.substring(thirdFieldStart).trim(); // Zip
    }
    
    String data=“文件中的数据”;
    //这只是为了确保阵列中有足够的空间
    int numNewLines=data.length()-data.replace(“\n”和“).length();
    字符串[][]结果=新字符串[numNewLines][3];
    String[]line=data.split(“\n”);
    int avgSalary=0;
    int secondFieldStart=行[0]。indexOf(“城市”);
    int thirdfeldstart=行[0].indexOf(“Zip”);
    
    对于(int i=1;i)和您试图解析的内容?这将有助于我尝试获取姓名、城市、邮政编码,然后是工资、百分比详细信息,即圆括号内的数据
    ()
    被认为是
    名称
    字段的一部分?空格是否被视为这些字段的有效字符?您想得到什么还不清楚。数据是否手动对齐(意思是,有空格字符将数据与相应的列标题对齐)?是否为“平均工资”信息仅在字符串结尾处可用?Thx!虽然现在可以使用,但基于固定长度的解析在将来可能并不总是有效。文本文件中的一个小更改(更多空格或删除空格)将破坏代码。您可以尝试“学习”如果需要,标题中所需的空格数也是。因为否则正则表达式无法区分人名和城市名。您仍然需要一些基于字符的约束。您可以检查我对识别字段长度所做的编辑。 John Long-name Joe New York 21003