[英]Regex - how to exclude this kind of sql from all sql statements in 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.