Регулярное выражение для замены многобайтовых символов? - PullRequest
2 голосов
/ 28 декабря 2010

Есть ли что-то вроде регулярного выражения для замены многобайтовых символов на свои собственные?

т.е. у меня есть большой текстовый файл с такими символами:

漁魚京供侠競共

и я хочу заменить их следующим образом:

漁;
魚;
京;
供;
...

Как я могу сделать это, используя регулярное выражение?Я уже пробовал:

(.)

заменить на

\1;\n

, но это "разбивает" многобайтовые символы (то есть utf8) на один байт на строку (таким образом, один символ разделен на две строки),Для однобайтовых символов это прекрасно работает ... Любая помощь будет принята с благодарностью.

Ответы [ 2 ]

3 голосов
/ 28 декабря 2010

Я использую Vim . Я создал новый файл и вставил образец текста (漁 魚 京 供 侠 競 共) в строку. Затем я набрал:

:%s/./\0; Ctrl + V Введите /g

Это успешно разделяет строки, как вам нужно.

Команды:

  • : - запустить новую команду (в командной строке vim)
  • % - применить изменение ко всему файлу
  • s/// - заменить
  • \0 - обратная ссылка на весь исходный матч (можно было бы использовать (.) и \1 также)
  • Ctrl + V - экранировать следующее нажатие клавиши как буквальный символ
  • g - заменить все вхождения в каждой строке
2 голосов
/ 28 декабря 2010
Используйте \ P {M} \ p {M} * в качестве замены.Чтобы сопоставить любое количество графем, используйте (?: \ P {M} \ p {M} *) + вместо \ X +

. Вы можете использовать

(?: \ P {M} \ p{M} *)
вместо
(.)
в .NET.

См. Regex - символы и свойства Unicode

...