Как избежать и убрать обратную косую черту и '' 'с помощью регулярных выражений? - PullRequest
1 голос
/ 21 апреля 2020

Мне нужно бежать все ''' и backslashes в string. Поэтому, если пользователь вводит \, он должен быть преобразован в \\ или, если пользователь вводит ''', он должен быть преобразован в \'''.

Пример ввода:

This is a test \. ABCDE ''' DEFG

Пример вывода:

This is a test \\. ABCDE \''' DEFG

Мне также нужно unescape backslashes и '''.

Пример ввода:

asdf \\\\ and \'''

Пример вывода:

asdf \\ and '''            

Я пробовал что-то подобное, но это не работает ....

 input = input.replaceAll(new RegExp(r'\\'), '\\\\')

Редактировать: После попытки предложить решение из комментариев, экранирование работает, но не экранирование не.

  String unescape(String input) {
    return input.replaceAll(r"\'''", r"'''").replaceAll(r"\\", r"\");
  }

Тест

  test("Unescape", () {
      String test = r" \\ TESTTEST ";
      String expected = r" \ TESTTEST ";
      expect(stringUtils.unescape(test), expected);
    });

Выход

Expected: ' \\ TESTTEST '
Actual: ' \\\\\\\\ TESTTEST '
Which: is different.
            Expected:  \\ TESTTEST  ...
              Actual:  \\\\\\\\ TES ...
                         ^
             Differ at offset 3

1 Ответ

1 голос
/ 22 апреля 2020

Для экранирования вы можете использовать

print(r"This is a test \. ABCDE ''' DEFG".replaceAll(r"\", r"\\").replaceAll(r"'''", r"\'''"));
// => This is a test \\. ABCDE \''' DEFG

Здесь вы заменяете все обратные косые черты на двойные обратные косые черты на .replaceAll(r"\", r"\\"), а затем заменяете все ''' подстроки на \''' подстроки.

Для удаления вы можете использовать

print(r"This is a test \\. ABCDE \''' DEFG".replaceAll(r"\'''", r"'''").replaceAll(r"\\", r"\"));
// => This is a test \. ABCDE ''' DEFG

Здесь вы сначала заменяете все подстроки \''' на ''' подстрок, а затем заменяете двойные обратные косые черты одиночными.

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