Тщательное разделение
Так что звучит так, будто вы хотите разделить строку запятыми, если запятые не заключены в пару соответствующих разделителей, таких как "{} [] <> ||".На данный момент я предполагаю, что этот файл будет обычным и не будет иметь вложенных маркеров.
Поэтому, чтобы найти все эти группы, мы хотим считать совпадение любой строкой символов, кроме запятых, AND частичное совпадение действительно, если у вас есть окружающие маркеры.
Код
String pattern = "[^,]*?({.*?}|\[.*?]|<.*?>|\|.*?\|)[^,]*?";
Pattern p = Pattern.compile(pattern);
Этот шаблон должен сделать это для вас.Он будет соответствовать любой строке, которая начинается без запятой, имеет вид оболочки в "{} [] <> ||"и может закончиться текстом.Вы можете даже обернуть pattern
в группе и повторить.Например:
String pattern = "([^,]*?({.*?}|\[.*?]|<.*?>|\|.*?\|)[^,]*?)+"; // Notice the parens on the outside and the '+'
Pattern p = Pattern.compile(pattern);
Если фигурные скобки являются необязательными, также учтите:
String pattern = "[^,]*?({.*?}|\[.*?]|<.*?>|\|.*?\|)?[^,]*?"; // Notice the added '?'
Pattern p = Pattern.compile(pattern);
Я точно забыл, какова реализация java для поиска строки по нескольким результатам, однако это работает в pythonс использованием методов search
, match
и finditer
, и шаблон будет по-прежнему работать с Java.