我正在寻找正则表达式模式提取提取以下示例,
sample Input:
"USER 1-EFA-Thermal Analysis-0.25;USER 2-EFA-Thermal Analysis-0.25;"
String[] parts = filename.split("\;");
for (int i=0;i<=parts.length;i++){
}
上面的代码用";"作为分隔符将行分成多个部分。在For循环中,我想再次将每个部分[]分割成三个由"-"(破折号)标识的短语。但问题是破折号也可以出现在要分隔的字段中。
所以我的逻辑是把"-"第一次出现之前的单词分成第一部分。
字符串在"破折号"第一次出现之后,直到"破折号"最后一次出现为第2次剩下的是第三部分
例如:
part[0]
USER 1
EFA-Thermal Analysis
0.25
part[1]
USER 2
EFA-Thermal Analysis
0.25
.split(string regex)
方法很可能不起作用,至少我看不出如何使用它来实现相对简单的解决方案。问题是,在我看来,破折号可以出现在不同的字符类型之间,这使得它很难抓住。
我通过稍微不同的正则表达式用法实现了你想要的:
String str = "USER 1-EFA-Thermal Analysis-0.25;USER 2-EFA-Thermal Analysis-0.25;";
Pattern pattern = Pattern.compile("(.+?)-(.+?)-(\d+(\.\d+)?);");
Matcher matcher = pattern.matcher(str);
while(matcher.find())
System.out.println(matcher.group(1) + " " + matcher.group(2) + " " + matcher.group(3));
下面的代码产生以下信息:
USER 1 EFA-Thermal Analysis 0.25
USER 2 EFA-Thermal Analysis 0.25
根据你方提供的样品,应该能满足你方的要求。这里有一个正则表达式的示例:
使用正则表达式匹配直到第一个"减号":
part.replaceAll("^([^\-]*)-", "$1n")
和从最后一个减号到字符串末尾的所有内容:
part.replaceAll("-([^\-]*?)$", "n$1")
String sample = "USER 1-EFA-Thermal Analysis-0.25;USER 2-EFA-Thermal Analysis-0.25;";
String[] parts = sample.split("\;");
for (String part : parts) {
part = part.replaceAll("^([^\-]*)-", "$1n");
part = part.replaceAll("-([^\-]*?)$", "n$1");
System.out.println(part);
}
USER 1
EFA-Thermal Analysis
0.25
USER 2
EFA-Thermal Analysis
0.25
Demo on ideone