Рубрики
Без рубрики

Регулярное выражение: Разбиение по символам, если только не в кавычках

Автор оригинала: Scott Robinson.

Много раз, когда вы анализируете текст, вам приходится разделять строки на символ запятой (или новые строки, вкладки и т. Д.), Но что тогда, если вам нужно было использовать запятую в строке и не разделять ее? Примером этого может быть большое количество. Так что, может быть, у нас была бы такая строка:

age: 28, favorite number: 26, salary: $1,234,108

Разбиение на запятые в этом случае дало бы:

age: 28
favorite number: 26
salary: $1
234
108

Близко, но не совсем.

Для целей форматирования многие числа имеют такие запятые, поэтому мы не можем этого избежать.

Один из способов решить эту проблему-поместить кавычки вокруг строки, которую не следует разделять. Таким образом, наш пример сверху будет выглядеть следующим образом:

age: 28, favorite number: 26, "salary: $1,234,108"

Итак, теперь, чтобы разделить это, нам нужно будет создать строку регулярного выражения с надписью “разделить на все символы запятой , если только не находится между кавычками”.

Используя Java и регулярные выражения, это должно сработать:

String[] strArray = text.split(",(?=([^\"]*\"[^\"]*\")*[^\"]*$)");

Используя строку регулярного выражения выше, вот как мы разделили бы строку с помощью Java:

String input = "age: 28, favorite number: 26, \"salary: $1,234,108\"";
String[] splits = input.split(",(?=([^\"]*\"[^\"]*\")*[^\"]*$)");
for (int i = 0; i < splits.length; i++) {
    System.out.println(splits[i].trim());
}
// Output:
// age: 28
// favorite number: 26
// salary: $1,234,108

Эта строка регулярного выражения использует так называемый “положительный внешний вид” для проверки наличия кавычек , фактически не сопоставляя их .

Это действительно мощная функция в регулярных выражениях, но ее может быть трудно реализовать.

Чтобы попрактиковаться, попробуйте посмотреть на приведенное нами регулярное выражение и посмотреть, можете ли вы изменить его, чтобы разделить на другой символ, например точку с запятой ( ; ). Если это было легко, попробуйте изменить его так, чтобы он должен был видеть две кавычки с каждой стороны строки.

У вас есть более простая строка регулярного выражения или несколько советов по их созданию? Дайте нам знать в комментариях!