如何从正则表达式组java中排除下划线
我使用的excel文件的名称可以是这种格式 表_A_Apr_2000.xlsx和我想要一个表达式,可以将组作为表单下面的字符串对象提供给我如何从正则表达式组java中排除下划线,java,regex,regex-negation,Java,Regex,Regex Negation,我使用的excel文件的名称可以是这种格式 表_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
[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("~~~~~");
}
任何建议都将不胜感激,特别是在模式表达部分
\\D
表示包括\uuu
的每个非数字。要消除此问题,请使用&&
运算符创建\\D
和[^\uz]
集。请尝试使用[\\D&&[^\u]]+
而不是\\D+[^\u]*
或者由于\D
是\D
的否定,我们可以使用德摩根定律,即~p和~q
与~(p或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
或
[^\d\uu]
没有交叉点。感谢您的解释,正则表达式是java或我认为的任何语言中最令人难以置信的部分之一。只需在上拆分(?
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