我正在寻找正则表达式模式提取来提取以下示例,
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
答案 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);
}