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

#regex

#регулярное выражение

Вопрос:

У меня есть следующая строка:

 Name was changed from *** to %%%
  

в то время как *** и %%% могут быть любыми.

Что мне нужно сделать, так это убедиться, что *** и %%% отличаются. Мне также нужно убедиться, что если *** равно Yan n и %%% равно Yann , они будут считаться похожими (пробелы могут встречаться до и / или после переменной).

Мое текущее регулярное выражение обнаруживает только само предложение:

 ^Name was changed from.*to.*$
  

Как я могу убедиться, что это не учитывает, когда *** и %%% идентичны (исключая пробелы)?

К вашему сведению, я использую это регулярное выражение в макросе VBA / Excel

Комментарии:

1.Вы имеете в виду вот так? ^Name was changed from (. ?) to (?:(?!1).)*$ regex101.com/r/5lqfqC/1 Это то, что записывается между from и to одним словом, или оно может содержать пробелы? Если нет, вы могли бы использовать S вместо (. ?)

2. Так что все с точностью до наоборот… для atesta в вашем примере это должно считаться другим (совпадением), в то время как test и te s t должны быть одинаковыми и, следовательно, не должны совпадать

3. Боюсь, вы не сможете сделать это с помощью одного регулярного выражения. Способ: выберите два имени, удалите из них пробелы, затем сравните их программно.

4. @Toto Я думаю, что первый комментарий довольно близок к тому, что мне нужно. Есть только проблема с пробелами, поэтому я все еще надеюсь, что это возможно … программно сделать это очень просто, но я использую формулу регулярного выражения и хотел бы придерживаться ее для простоты и ясности

5.@ncohen Возможно, как ^Name was changed from (. ?) to (?!s*1s*$).*$ regex101.com/r/EWwkD6/1

Ответ №1:

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

 ^Name was changed from (. ?) to (?!s*1s*$).*$
  

Демонстрация Regex101

Объяснение

  • ^ Начало строки
  • Name was changed from (. ?) to Сопоставьте начальный текст и зафиксируйте в группе без жадности то, что находится между from и to
  • (?! Отрицательный прогноз, утверждение, что то, что находится непосредственно справа, не является
    • s*1s*$ Сопоставьте символы 0 пробелов, сделайте обратную ссылку на группу 1, символы 0 пробелов и подтвердите конец строки
  • ) Закройте предварительный просмотр
  • .*$ Сопоставьте любой символ до конца строки