簡體   English   中英

java-匹配字符串中的正則表達式模式(列出匹配和不匹配的部分)

[英]java-Match a regex pattern in a string(listing matching and non-matching parts)

我有一個包含五個字段的csv字符串(3個必填字段和2個可選字段)。 可選字段位於位置3和5。我有一個正則表達式模式來標識雙引號中的字符串

    private static final String TEXT_IN_DBL_QUOTES_REGEX="\"([^\"]*)\"";
    private static final String rowData="\"Field1\", \"Field2\", , \"Field4\", ";

    public static void main(String[] args){
        List<String> fields = Lists.newArrayList();
        Pattern regex = Pattern.compile(TEXT_IN_DBL_QUOTES_REGEX);
        Matcher matcher = regex.matcher(rowData);
        while(matcher.find()){
           fields.add(matcher.group(1));
        }
        return fields;
    }

My expected result is an array list containing 
Field1, Field2, null, Field4, null
but the above is returning 
Field1, Field2, Field4

我如何調整上面的代碼以獲得所需的結果?

您可以這樣調整正則表達式:

String TEXT_IN_DBL_QUOTES_REGEX="\"([^\"]*)\"|(?<=,) *(?=,|$)";
String rowData="\"Field1\", \"Field2\", , \"Field4\", ";

List<String> fields = new ArrayList<>();
Pattern regex = Pattern.compile(TEXT_IN_DBL_QUOTES_REGEX);
Matcher matcher = regex.matcher(rowData);
while(matcher.find()) {
    fields.add(matcher.group(1));
}
System.out.println (fields);

輸出:

[Field1, Field2, null, Field4, null]

暫無
暫無

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

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