簡體   English   中英

使用正則表達式按列拆分字符串

[英]Splitting String by column with regex

4 
1 1
1 2 1
0
1 1

這是我作為輸入獲得的字符串,但我只需要從第二列開始的每一列,也就是:

  • 1(第二行)
  • 2 和 1(第三排)
  • 1(第五排)

String在可能有多少行或多少列(列被一個空格分隔)方面沒有固定大小。

我認為這很容易通過使用:

string.split("enter regex here");

我需要第一列之后的每一列。 我仍在學習正則表達式,但我似乎無法找到一個好的解決方案。 我知道"\\r?\\n" and " "用於拆分,但不知道如何連接兩者以獲得每一列。 非常感謝任何幫助:)

另一個字符串可能如下所示:

2
1
1 2
9 3 5
1 3
0 9 2 4
0

在這種情況下,我需要2, 3, 5, 3, 9, 2, 4

您可以使用以下正則表達式:

(?<=\d )\d+

它匹配任何數字組合,后跟“數字+空格”。

您應該使用帶有這個正則表達式的匹配器,而不是對此進行拆分。

此處查看演示。

首先修剪前導列,然后在空白處拆分:

String[] split = str.replaceAll("(?m)^\\d+\\s*", "").split("\\s");

現場演示

替換使用多行標志(?m) ,這使得^匹配每一行的開頭,並且\s匹配空格,因此第一列被有效地從每一行中刪除,但\s匹配換行符,所以只有一個列被完全刪除。 盡管新行保留在超過 1 列的行中。

因為\s匹配空格換行符,所以在列之間和(刪除第一列)行之間進行拆分,從而產生所需的結果。

我相信這是解決方案所需的最少代碼。

您可以使用String.lines拆分每一行以獲取行流,然后在使用Pattern.splitAsStream在每個空間拆分后對這些行進行平面映射,並跳過第一列並使用逗號作為分隔符重新連接:

String input ="4 \n"
            + "1 1\n"
            + "1 2 1\n"
            + "0\n"
            + "1 1\n";

Pattern pattern = Pattern.compile(" ");
String result   = input.lines()
                       .flatMap(line -> pattern.splitAsStream(line).skip(1))
                       .collect(Collectors.joining(", "));

System.out.println(result);

//1, 2, 1, 1
String s = "4 \n"
        + "1 1\n"
        + "1 2 1\n"
        + "0\n"
        + "1 1\n";
String result = s.replaceAll("((^|\\n)\\d|[ ])", "").replaceAll("(\\d)(?=\\d)", "$1, ");
System.out.println(result); 
//1, 2, 1, 1

您可以使用以下正則表達式,它首先捕獲一個數字后跟一個空格,然后捕獲任何數字序列,后跟一個空格或什么都沒有。 第二個捕獲組代表您感興趣的String的其余部分。

(\d+) ((\d+( |))+)

這是一個實現:

String str = "4 \n" +
        "1 1\n" +
        "1 2 1\n" +
        "0\n" +
        "1 1";

Pattern pattern = Pattern.compile("(\\d+) ((\\d+( |))+)");
Matcher matcher = pattern.matcher(str);

while(matcher.find()){
    System.out.println(matcher.group(2));
}

這是測試上述兩個輸入的代碼的鏈接:

https://www.jdoodle.com/iembed/v0/s92

輸出

1
2 1
1

2
3 5
3
9 2 4

這里還有一個測試正則表達式的鏈接:

https://regex101.com/r/z1plcG/1

暫無
暫無

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

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