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