Автор оригинала: 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
Эта строка регулярного выражения использует так называемый “положительный внешний вид” для проверки наличия кавычек , фактически не сопоставляя их .
Это действительно мощная функция в регулярных выражениях, но ее может быть трудно реализовать.
Чтобы попрактиковаться, попробуйте посмотреть на приведенное нами регулярное выражение и посмотреть, можете ли вы изменить его, чтобы разделить на другой символ, например точку с запятой ( ;
). Если это было легко, попробуйте изменить его так, чтобы он должен был видеть две кавычки с каждой стороны строки.
У вас есть более простая строка регулярного выражения или несколько советов по их созданию? Дайте нам знать в комментариях!