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

时间:2015-07-29 07:10:14

标签: java regex

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

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循环中我想再次将每个部分[]分成三个短语,用“ - ”(破折号)标识。但是,Dash的问题也可以出现在要分离的字段中。

所以我的逻辑是将第一次出现之前的单词“ - ”分成第一部分。

字符串首次出现“破折号”直到最后一次出现“破折号”为第2次 剩下的就是第三部分

例如:

part[0]
USER 1
EFA-Thermal Analysis
0.25

part[1]
USER 2
EFA-Thermal Analysis
0.25

2 个答案:

答案 0 :(得分:3)

.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

根据您提供的样本,应该按照您的要求进行操作。正则表达式的示例可用here

答案 1 :(得分:2)

使用正则表达式匹配所有内容,直到第一个“减号”:

</body>

以及从最后一个减去字符串结尾的所有内容:

part.replaceAll("^([^\\-]*)-", "$1\n")

<强>代码

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("^([^\\-]*)-", "$1\n");
    part = part.replaceAll("-([^\\-]*?)$", "\n$1");
    System.out.println(part);
}

Demo on ideone