模式匹配- Java中的正则表达式



我正在寻找正则表达式模式提取提取以下示例,

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

最新更新