我只需要在文件名的开头过滤掉与[LCK_或OPN_]匹配的字符串,但不要考虑其他地方。
示例源字符串:
LCK_card_L02NOR19999_2012-11-07-121600 [Invalid/Filter it]
BLTM_L183ROP3289_2012-11-07-121601 [Valid one]
TEMP_LCK_card_L02NOR19999_2012-11-07-121600 [Valid one]
我试过这样:
LCK_|OPN_
但它也匹配TEMP_LCK_XXXXX。
如何组合我的rquuriement模式[忽略LCK_或OPN_并提取日期]?
我的日期提取的正则表达式模式
(19|20)\\d\\d[-](0[1-9]|1[012])[-](0[1-9]|[12][0-9]|3[01])[-]\\d\\d\\d\\d\\d\\d]
答案 0 :(得分:1)
^(LCK_|OPN_)
- ^
代表输入的开始。
为了将其与正则表达式的其余部分结合使用,请跳过任意数量的任意字符:
^(?:LCK_|OPN_).*(19|20)\\d\\d.....
(如果您不想将?:
和LCK_
捕获到群组中,请使用OPN_
。
答案 1 :(得分:1)
文件的开头,还是行的开头?
试试这个......
"^(LCK_|OPN_).*"
答案 2 :(得分:1)
考虑以下代码:
String[] strs = new String[] {
"LCK_card_L02NOR19999_2012-11-07-121600", // Invalid
"BLTM_L183ROP3289_2012-11-07-121601", // Valid one
"TEMP_LCK_card_L02NOR19999_2012-11-07-121600" // Valid one
};
String pattern = "^(?!(LCK_|OPN_))(.*)((19|20)[0-9]{2}-(0[1-9]|1[012])-(0[1-9]|[12][0-9]|3[01])-[0-9]{6}).*";
for (String string : strs) {
boolean m = string.matches(pattern);
System.out.println(m ? "Valid" : "Invalid");
}
这将首先匹配字符串的开头(由^
表示),然后匹配除 LCK_
或OPN_
之外的任何(由{{1}表示}),然后是0或更多任意字符,然后是你的日期模式,然后可能是一些字符。