Notepad++ как заменить все [,] на (,)?

как заменить все [,] на (,) в блокноте ++ с регулярным выражением? так:

  abc[1, 2]; => abc(1, 2);
  abc[EDGE, 2]; => abc(EDGE, 2);
  abc[EDGE, INDEX]; => abc(EDGE, INDEX);
  ...
  abc[EDGE, otherArray[1]]; => abc[EDGE, otherArray[1]);
  abc[array[VERT], other[INDEX]]; => abc(array[VERT], other[INDEX]);

Редактировать:

, имеет значение (это массив 2d), их следует исключить:

    abc[1]; <--- ignore
    abc[1, 2, 3]; <-- ignore
    abc[index]; <-- ignore
    abc[otherArray[EDGE], 2, 8]; <-- ignore

Спасибо.

Редактировать2:

Привет, замена, твой ответ работает почти идеально, за исключением этой строки:

if (test[0])
{
    triangles.push_back(tris[i, V1]); // <-- fail here, it gets 'test[0]' involved
    triangles.push_back(tris[i, V2]);
    triangles.push_back(tris[i, V3]);
}

К вашему редактированию, вы просите захватить только четные группы или только группы из 2? Ваши примеры выше имеют длину 2 элемента, а примеры без захвата — 1 и 3; оставляя abc[1,2,3,4] неоднозначным.

Substitute 19.12.2022 02:36

как вы можете видеть в примерах, это двумерный массив, поэтому только два элемента, другие случаи игнорируются. я перегрузил оператор (int, int) в С++ для имитации [,] в С#.

21k 19.12.2022 02:53

Я отредактировал исходный ответ, который должен работать для вашего варианта использования.

Substitute 19.12.2022 04:59
Структурированный массив Numpy
Структурированный массив Numpy
Однако в реальных проектах я чаще всего имею дело со списками, состоящими из нескольких типов данных. Как мы можем использовать массивы numpy, чтобы...
T - 1Bits: Генерация последовательного массива
T - 1Bits: Генерация последовательного массива
По мере того, как мы пишем все больше кода, мы привыкаем к определенным способам действий. То тут, то там мы находим код, который заставляет нас...
Что такое деструктуризация массива в JavaScript?
Что такое деструктуризация массива в JavaScript?
Деструктуризация позволяет распаковывать значения из массивов и добавлять их в отдельные переменные.
0
3
99
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

Вы можете использовать это регулярное выражение для захвата содержимого между [].
\[(.*)\]

Чтобы устранить необходимость соответствия только приведенным выше примерам, вы можете использовать
\[([^,\n]+,[^,\n]+)\]

Смотрите: https://regex101.com/r/tfY6cs/1

В поле замены вы можете использовать
\(\1\) поставить (<captured group1>)

Если вам нужно захватить [] рекурсивно, у вас есть два варианта.

Самый простой вариант — просто повторить поиск/замену.

Жесткий вариант - переписать регулярное выражение, чтобы оно было рекурсивным.

Смотрите также: https://stackoverflow.com/a/17392520/19192256

Почти идеально, но есть недостаток, см. мой исходный пост (Редактировать 2), похоже, я не могу поместить сюда код.

21k 19.12.2022 07:08

Привет, 21к. Вы можете настроить его на этот \[([^,\n]+,[^,\n]+)\], который должен обрабатывать эти надоедливые символы новой строки между [ и ].

Substitute 19.12.2022 07:18

Ваш ответ очень помогает и экономит много работы. Единственный случай отказа это: process(points[1].coords, points[2].coords, points[3].coords, points[4].coords); но это не беда, мне просто нужно пропустить их (несколько).

21k 19.12.2022 13:44

Вы можете использовать

\[(\w+(\[(?:[^][]++|(?-1))*])*\s*,\s*\w+(\[(?:[^][]++|(?-1))*])*)]

Посмотрите демонстрацию регулярного выражения . Замените на \($1\) (круглые скобки нужно экранировать, так как они особенные в замене регулярных выражений Boost).

Подробности:

  • \[ - [ символ
  • (\w+(\[(?:[^][]++|(?-1))*])*\s*,\s*\w+(\[(?:[^][]++|(?-1))*])*) - Группа 1:
    • \w+ - один или несколько символов слова
    • (\[(?:[^][]++|(?-1))*])* - ноль или более подстрок между парными вложенными квадратными скобками
    • \s*,\s* - запятая, заключенная с нулем или более пробелами
    • \w+(?:(\[(?:[^][]++|(?-1))*])*)? - один или несколько символов слова, а затем ноль или более подстрок между парными вложенными квадратными скобками
  • ] - символ ].

Демонстрация Блокнота++:

Это отличный ответ, который подходит для гораздо большего количества вариантов использования, но для этого конкретного вопроса они хотели что-то конкретное для Notepad ++; Я не уверен, как работает подстановка в Notepad++ в отношении поиска и замены.

Substitute 19.12.2022 10:28

@Substitute Этот ответ для Notepad++. Смотрите скриншот. Заменяются только ожидаемые 5 строк из 9.

Wiktor Stribiżew 19.12.2022 11:26

Эти шаблоны потрясающие :-) ++

The fourth bird 19.12.2022 12:03

Ваш ответ более точен, он успешно идентифицирует этот случай: process(points[1].coords, points[2].coords, points[3].coords, points[4].coords); который не соответствует приведенному выше ответу. Потрясающий!

21k 19.12.2022 13:49

Другие вопросы по теме