Как я могу собрать регулярное выражение для разделения строки fiql (пример ниже), который разделяет условия с точкой с запятой. Проблема состоит в том, что полуколоны также могут быть в строке.Регулярное выражение строк с запятой в данных
Я использую строку split, но не могу найти правильное регулярное выражение. Я пробовал ниже, в котором в попытке получить последнюю с запятой перед ==:
query.split("(;)[^;]*==)
Но это работает только для первого ключа.
Пример строки:
Key1==value1; key2==val;ue2;key3==value3
Target является массив или список: key1==value1, key2==val;ue2, key3==value3
Проблема здесь является точка с запятой в значении 2 вызывает раскол.
Любая идея?
Это, по крайней мере, квадратичное регулярное выражение, так как вы дважды читаете строку ввода. Если строка достаточно длинная или файл достаточно большой, это будет очень медленно. Он работает, но должен ли он действительно использоваться? – bashnesnos
@bashnesnos Правда, этот подход может быть не лучшим с точки зрения производительности из-за обратного отслеживания, но я не уверен, будет ли это O (N^2) (если это то, что вы подразумеваете под * квадратичным *). Я подозреваю, что он будет ближе к O (2 * N). Это регулярное выражение будет итерировать, чтобы найти ';', тогда look-ahead попытается найти совпадение для '[^;] * ==', поэтому '[^;] *' может выполнять итерацию max до следующего ';'. Таким образом, только область символов, которые могут повторяться несколько раз, совпадают с символами '[^;] *'. Но они по-прежнему повторяются только max 2 раза: один раз, когда мы будем искать разделитель ';' и один раз в перспективе. – Pshemo
Да, я должен был написать 2 * N. Я следовал той же логике, что и вы, но как она превратилась в квадратичную, в конце концов, я не знаю. Извините меня за замешательство :-) – bashnesnos