簡體   English   中英

如何從正則表達式組Java中排除下划線

[英]How to exclude underscore from regex group java

我正在使用可以采用這種格式的excel文件名table_A_Apr_2000.xlsx,我想要一個表達式,該表達式將給我組作為以下形式的字符串對象

                [table_A, Apr, 2000, .xlsx]

當我在代碼中使用此表達式時

       String table="table_A";
     String[] slist = {"table_A_Apr_2001.xlsx"};
    Pattern p = Pattern.compile("^"+table+"|\\d+|\\D+|[^_]*");

    for(int i=0; i<slist.length;i++){

        Matcher m = p.matcher(slist[i]);
        List<String> a = new ArrayList<String>();
        while(m.find()){
            a.add((m.group()));
        }

        System.out.println(a);
        System.out.println("~~~~~");

    }

它給出以下輸出

       [table_A, _Apr_, 2001, .xlsx, ]
   but I want it to be like 
       [table_A, Apr, 2000, .xlsx] 

任何建議將不勝感激,尤其是在模式表達部分

\\\\D代表每個包含_非數字。 為了消除它,請使用&&運算符創建\\\\D[^_]集的交集 嘗試使用[\\\\D&&[^_]]+代替\\\\D+|[^_]*

或因為\\D\\d否定,所以我們可以使用De Morgan定律~p AND ~q ~(p OR q)相同,並將其重寫為[^\\\\d_]+

可以使用正式的正則表達式匹配器,但此處可行的一種選擇是對文件名進行智能拆分:

String filename = "table_A_Apr_2001.xlsx";
filename = filename.substring(0, filename.indexOf('.'));
String[] parts = filename.split("_(?=[^_]{3,})");

System.out.println("table: " + parts[0]);
System.out.println("month: " + parts[1]);
System.out.println("year: " + parts[2]);

table: table_A
month: Apr
year: 2001

演示

暫無
暫無

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

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