Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何从正则表达式组java中排除下划线_Java_Regex_Regex Negation - Fatal编程技术网

如何从正则表达式组java中排除下划线

如何从正则表达式组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

我使用的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+"|\\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