[英]Pattern Matching - Regex in 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 次,其余為第 3 部分
例如 :
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("^([^\\-]*)-", "$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);
}
輸出
USER 1
EFA-Thermal Analysis
0.25
USER 2
EFA-Thermal Analysis
0.25
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.