正则表达式替换多字节字符?

时间:2010-12-28 02:13:38

标签: regex utf-8 notepad++ multibyte

是否有类似正则表达式的东西用自己替换多字节字符?

即。我有一个大文本文件,其中包含以下字符:

漁魚京供侠競共

并希望将其替换为:

漁;
魚;
京;
供;
...

如何使用正则表达式执行此操作?我已经尝试过了:

(.)

替换为

\1;\n

但是“将”多字节字符(即utf8)“拆分”为每行一个字节(因此一个字符超过2行分割)。对于单字节字符,它工作正常......任何帮助都将受到高度赞赏。

2 个答案:

答案 0 :(得分:3)

我使用Vim。我创建了一个新文件,并将您的示例文本粘贴到一行。然后我打字:

  

:%s/./\0; 控制+ V 输入 /g

这可以根据需要成功地分隔行。

命令是:

  • : - 启动一个新命令(在vim命令行上)
  • % - 将更改应用于整个文件
  • s/// - 替换
  • \0 - 对整个原始匹配的反向引用(也可以使用(.)\1
  • Ctrl + V - 将下一个击键转义为文字字符
  • g - 替换每行的所有匹配项

答案 1 :(得分:2)

使用\ P {M} \ p {M} *作为替代。要匹配任意数量的字素,请使用(?:\ P {M} \ p {M} *)+而不是\ X +

您可以在.NET中使用

(?:\ P {M} \ p {M} *)
代替
(。)

参考Regex - Unicode Characters and properties