Я не вижу, как бы сработал ваш первый оператор re.sub
, если бы ваша строка была действительно определена как есть.
>>> s = r' ꐊ,ꀵ,\u0f6e,ⴗ,ꦚ,\u2d75,ꢯ,⾌,\ua97d,⩱,ㇴ,\u2d6e,鼺,\x00Ꞁ'
>>> re.sub(r",\u0f6e,", r",deleted,", s)
' ꐊ,ꀵ,\\u0f6e,ⴗ,ꦚ,\\u2d75,ꢯ,⾌,\\ua97d,⩱,ㇴ,\\u2d6e,鼺,\\x00Ꞁ'
Обратите внимание, как остается первый r'\u0f6e'
. В регулярных выражениях символ \
также является специальным, поэтому его также следует экранировать. Это можно сделать с помощью \\
. Теперь попробуйте:
>>> re.sub(r",\\u0f6e,", r",deleted,", s)
' ꐊ,ꀵ,deleted,ⴗ,ꦚ,\\u2d75,ꢯ,⾌,\\ua97d,⩱,ㇴ,\\u2d6e,鼺,\\x00Ꞁ'
Чтобы соответствовать действительному выражению и не больше, чем необходимо, обратите внимание, что последовательность \\u
содержит ровно 4 последовательных символа между 0-9
и a-f
. Вместо того, чтобы пытаться сопоставить любые 5 символов, будьте более конкретны, например:
>>> re.sub(r",\\u[0-9a-f]+,", r",deleted,", s)
' ꐊ,ꀵ,deleted,ⴗ,ꦚ,deleted,ꢯ,⾌,deleted,⩱,ㇴ,deleted,鼺,\\x00Ꞁ'
Обратите внимание, что весь этот ответ предполагает, что предоставленная вами информация верна, а escape-последовательности на самом деле являются символом обратной косой черты. Было бы полезно обновить ваш вопрос, включив в него эти фрагменты кода, как у меня здесь, чтобы быть менее двусмысленным в отношении того, что делается (поскольку мы можем скопировать и вставить ваш код и запустить его, чтобы увидеть, что пошло не так, и мы также можем исправить это более подробно). легко).