簡體   English   中英

Java Regex Help:在空格上拆分字符串,“=>”和逗號

[英]Java Regex Help: Splitting String on spaces, “=>”, and commas

我需要在以下任何序列上拆分字符串:

1個或多個空格
0個或更多空格,后跟逗號,后跟0或更多空格,
0個或多個空格,后跟“=>”,后跟0或更多空格

之前沒有使用Java正則表達式的經驗,所以我有點困惑。 謝謝!

例:
添加r10,r12 => r10
store r10 => r1

只需創建匹配任意三種情況的正則表達式並將其傳遞給split方法:

string.split("\\s*(=>|,|\\s)\\s*");

正則表達式在字面上意味着

  1. 零個或多個空格( \\\\s*
  2. 箭頭,逗號或空格( =>|,|\\\\s
  3. 零個或多個空格( \\\\s*

您可以使用普通空格字符替換空格\\\\s (檢測空格,制表符,換行符等) 如有必要。

嚴格翻譯

為簡單起見,我將解釋你對“空間”的指示( )作為“任何空白”( \\s )。

翻譯您的規范或多或少“逐字逐句”是划分以下任何一個:

  • 1個或多個空格
    • \\s+
  • 0個或多個空格( \\s* ),后跟逗號( , ),后跟0或更多空格( \\s*
    • \\s*,\\s*
  • 0個或更多空格( \\s* ),后跟“=>”( => ),后跟0個或更多個空格( \\s*
    • \\s*=>\\s*

要匹配上述任何一項: (\\s+|\\s*,\\s*|\\s*=>\\s*)

縮小形式

但是,您的規范可以“減少”為:

  • 0個或更多空格
    • \\s*
  • 后跟空格,逗號或“=>”
    • (\\s|,|=>)
  • 然后是0或更多的空格
    • \\s*

把它們放在一起: \\s*(\\s|,|=>)\\s*

簡化形式繞過一些極端情況,嚴格翻譯形式,使一些意想不到的空“匹配”。

這是一些代碼:

import java.util.regex.Pattern;

public class Temp {

    // Strictly translated form:
    //private static final String REGEX = "(\\s+|\\s*,\\s*|\\s*=>\\s*)";

    // "Reduced" form:
    private static final String REGEX = "\\s*(\\s|=>|,)\\s*";

    private static final String INPUT =
        "one two,three=>four , five   six   => seven,=>";

    public static void main(final String[] args) {
        final Pattern p = Pattern.compile(REGEX);
        final String[] items = p.split(INPUT);
        // Shorthand for above:
        // final String[] items = INPUT.split(REGEX);
        for(final String s : items) {
            System.out.println("Match: '"+s+"'");
        }
    }
}

輸出:

Match: 'one'
Match: 'two'
Match: 'three'
Match: 'four'
Match: 'five'
Match: 'six'
Match: 'seven'
String[] splitArray = subjectString.split(" *(,|=>| ) *");

應該這樣做。

暫無
暫無

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

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