Как превратить несколько «Sqrt [некоторый текст внутри]» в несколько Sqrt (некоторый текст внутри), я имею в виду из [] в () - PullRequest
6 голосов
/ 19 декабря 2011

Я получил следующее выражение, которое может выглядеть следующим образом (количество Sqrt [XXX] неизвестно)

Sqrt[A+B] + Sqrt[Min[A,B]] * Min[Sqrt[C],D]

и я хочу превратить все Sqrt[XXX] в Sqrt(XXX), я хочу заменить [] скобки Sqrt на () скобки

, поэтому приведенный выше пример будет выглядеть как

Sqrt(A+B) + Sqrt(Min[A,B]) * Min[Sqrt(C),D]

Я не хочу "навредить" другим [] скобкам в выражении (например, рядом с Min)

Как я могу сделать это с помощью регулярных выражений?

Ответы [ 2 ]

3 голосов
/ 19 декабря 2011

Вы можете сделать это, используя итерацию по символам в строке. Сначала найдите индекс Sqrt[, а затем найдите соответствующую закрывающую скобку.

Вот пример кода:

final String s = "Sqrt[A+B] + Sqrt[Min[A,B]] * Min[Sqrt[C],D]";
final char[] charArray = s.toCharArray();

int index = s.indexOf("Sqrt[");
while (index != -1) {
    final int open = index + 4;
    charArray[open] = '(';

    // look for closing bracket
    int close;
    int matching = 0;
    for (close = open + 1; close < charArray.length; close++) {
        char c = charArray[close];
        if (c == ']') {
            if (matching == 0) {
                break;
            }
            matching--;
        } else if (c == '[') {
            matching++;
        }
    }
    charArray[close] = ')';
    index = s.indexOf("Sqrt[", index + 1);
}
System.out.println(new String(charArray));

Я не проверял это должным образом, поэтому, пожалуйста, сделайте.

1 голос
/ 19 декабря 2011

Используя данный формат исходной строки, вы можете сделать это с 3 регулярными выражениями.Хитрость заключается в том, чтобы «переименовать» квадратные скобки, принадлежащие функции Min, и восстановить их позже.Вы бы сделали что-то вроде:

s/Min\[([^[]+)\]/Min\{$1\}/g;
s/Qsrt\[([^[]+)\]/Sqrt\($1\)/g;
s/Min\{([^{]+)\}/Min\[$1\]}/g;

В общем случае парсер будет подходящим вариантом.В особых случаях, подобных этому, может помочь трюк: -).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...