Java 正则表达式解析多行数据
我有一个文件中的以下数据,我想看看是否可以在这里进行正则表达式解析 Name (First Name) City Zip John (retired) 10007 Mark Baltimore 21268 .... .... Avg Salary 70000 100% 姓名(名)城市邮编 约翰(退休)10007 马克·巴尔的摩21268 .... .... 平均工资 70000 100% 它不是一个大文件,文件中的所有数据都可以在字符串对象中使用新行字符(\n)(String data=“文件中的数据”)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
通过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