Эта проблема была другое решение, которое не было упомянуто, поэтому я выложу это здесь для завершения. Эта ситуация аналогична этот вопрос [ «регулярное выражение-соответствует шаблону, за исключением ...»] [4]
Мы можем решить эту проблему с красиво простым регулярным выражением:
\([^)]*\)|(\s*,\s*)
На левой стороне чередования |
всего матчей (parentheses)
. Мы проигнорируем эти матчи. Правая сторона сопоставляет и фиксирует запятые и окружающие пространства для группы 1, и мы знаем, что они являются правильными апострофами, потому что они не соответствовали выражению слева. Мы заменим эти запятые чем-то отличительным, а затем расколом.
Эта программа показывает, как использовать регулярные выражения (см результаты в нижней части online demo):
import java.util.*;
import java.io.*;
import java.util.regex.*;
import java.util.List;
class Program {
public static void main (String[] args) throws java.lang.Exception {
String subject = "a, b, c, search:(1, 2, 3), d";
Pattern regex = Pattern.compile("\\([^)]*\\)|(\\s*,\\s*)");
Matcher m = regex.matcher(subject);
StringBuffer b= new StringBuffer();
while (m.find()) {
if(m.group(1) != null) m.appendReplacement(b, "SplitHere");
else m.appendReplacement(b, m.group(0));
}
m.appendTail(b);
String replaced = b.toString();
String[] splits = replaced.split("SplitHere");
for (String split : splits) System.out.println(split);
} // end main
} // end Program
Reference
How to match (or replace) a pattern except in situations s1, s2, s3...
Он может быстро получить сложно: будет * "a, (, c,), search: (1, 2, 3), d" * - допустимый ввод, например? – SyntaxT3rr0r
Я проверяю содержимое поиска, разделив его на его составные части. Я ошибаюсь на стороне отказа от вещей, поэтому я хотел бы, чтобы приведенная выше строка была разделена на [a] [(, c,)] [поиск: (1, 2, 3)] [d]. Тогда я просто заметил в другом месте, что (, c) не является допустимым термином и отклоняет общий поиск. – Jack