【发布时间】:2020-09-08 10:12:38
【问题描述】:
例如尝试在特定代码之后提取子字符串
String sample1 = "/ASDF/096/GHJKL/WER/WER/dv/7906/CODEM/TEAR1331927498xxxxxx/YUII/OPL";
String sample2 = "/CODEM/TEAR1331927498xxxxxx";
String regExpresssion = "[/CODEM/]{6}(^[a-zA-Z0-9|\\s])?";
final Pattern pattern = Pattern.compile(regExpresssion);
final Matcher matcher = pattern.matcher(sample1);
if (matcher.find()) {
String subStringOut = sample1.substring(matcher.end());
}
subStringOut for sample 1 > TEAR1331927498xxxxxx/YUII/OPL
subStringOut for sample 2 > TEAR1331927498xxxxxx
上面的代码工作正常,但现在我需要在下面的示例的正则表达式中再添加一个标识符“/CODER/”
String sample3 = "/ASDF/096/GHJKL/WER/WER/dv/7906/CODER/TEAR1331927498xxxxxx/YUII/OPL";
我试过了
String regExpresssion = "[/CODEM/|/CODER/]{6}(^[a-zA-Z0-9|\\s])?";
但它不起作用。有什么建议吗?
谢谢!!
【问题讨论】:
-
你能试试这个例子来演示这个问题吗? regex101.com/r/UOWTje/1
-
我对您的正则表达式以及它的确切含义感到困惑。文件路径?
-
你似乎只需要
String regExpresssion = "/CODE[MR]/",见demo。您的[/CODEM/]{6}(^[a-zA-Z0-9|\s])?正则表达式是一团糟,而且是错误的。它等于[/CODEM]{6}正则表达式,因为(^[a-zA-Z0-9|\s])?从不匹配任何内容,字符串中的 6 个特定字符后不能有字符串开头。您必须搜索字符序列,如果是这样,则必须从该模式中删除[和]{6}并删除所有冗余部分。当然,您也可以使用/(CODEM|CODER)/,但/CODE[RM]/更简洁。