Java регулярное выражение для извлечения содержимого в квадратных скобках строка ввода ниже Item(s): [item1.test],[item2.qa],[item3.production] Можете ли вы помочь мне написать регулярное выражение Java для извлечения item1.test,item2.qa,item3.production сверху входной строки? Ответ 1 Немного более кратким: String in = "Item(s): [item1.test],[item2.qa],[item3.production]"; Pattern p = Pattern.compile("\\[(.*?)\\]"); Matcher m = p.matcher(in); while(m.find()) { System.out.println(m.group(1)); } Ответ 2 Вы должны использовать положительный lookahead и lookbehind: (?<=\[)([^\]]+)(?=\]) (? <= [) Совпадает со всем, за которым следует [ ([^]] +) Соответствует любой строке, не содержащей] (? =]) Совпадает со всем до] Ответ 3 Я разделил бы после обрезки предшествующего или конечного мусора: String s = "Item(s): [item1.test], [item2.qa],[item3.production] "; String r1 = "(^.*?\\[|\\]\\s*$)", r2 = "\\]\\s*,\\s*\\["; String[] ss = s.replaceAll(r1,"").split(r2); System.out.println(Arrays.asList(ss)); // [item1.test, item2.qa, item3.production]
Ответ 1 Немного более кратким: String in = "Item(s): [item1.test],[item2.qa],[item3.production]"; Pattern p = Pattern.compile("\\[(.*?)\\]"); Matcher m = p.matcher(in); while(m.find()) { System.out.println(m.group(1)); }
Ответ 2 Вы должны использовать положительный lookahead и lookbehind: (?<=\[)([^\]]+)(?=\]) (? <= [) Совпадает со всем, за которым следует [ ([^]] +) Соответствует любой строке, не содержащей] (? =]) Совпадает со всем до]
Ответ 3 Я разделил бы после обрезки предшествующего или конечного мусора: String s = "Item(s): [item1.test], [item2.qa],[item3.production] "; String r1 = "(^.*?\\[|\\]\\s*$)", r2 = "\\]\\s*,\\s*\\["; String[] ss = s.replaceAll(r1,"").split(r2); System.out.println(Arrays.asList(ss)); // [item1.test, item2.qa, item3.production]