簡體   English   中英

模式匹配 - Java 中的正則表達式

[英]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

在ideone上演示

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM