0

我只需要在文件名的开头过滤掉与 [LCK_ or 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。

如何组合我的要求的模式 [忽略 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]
4

3 回答 3

1

^(LCK_|OPN_)-^代表输入的开始。

为了将它与您的正则表达式的其余部分结合起来,请跳过任意数量的任意字符:

^(?:LCK_|OPN_).*(19|20)\\d\\d.....

?:如果您不想捕获LCK_OPN_成组,请使用)。

于 2012-12-06T08:10:26.707 回答
1

文件的开头,还是行的开头?

试试这个...

"^(LCK_|OPN_).*"
于 2012-12-06T08:13:40.550 回答
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_or之外的任何内容OPN_(用 表示?!),然后是 0 个或多个任意字符,然后是您的日期模式,然后可能是多个字符。

于 2012-12-06T08:17:49.903 回答