2

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

即我有一个带有这样字符的大文本文件:

漁魚京供侠競共

并想像这样替换它们:

漁;
魚;
京;
供;
...

我该怎么做,使用正则表达式?我已经试过了:

(.)

用。。。来代替

\1;\n

但这会将多字节字符(即 utf8)“拆分”为每行一个字节(因此一个字符超过 2 行拆分)。对于单字节字符,它工作正常......任何帮助将不胜感激。

4

2 回答 2

3

我使用Vim。我创建了一个新文件并将您的示例文本(渔鱼京供侠竞共)粘贴到一行中。然后我输入:

:%s/./\0;Ctrl+VEnter/g

这成功地根据您的需要分隔行。

命令是:

  • :- 启动一个新命令(在 vim 命令行上)
  • %- 将更改应用于整个文件
  • s///- 代替
  • \0- 对整个原始匹配的反向引用(也可以(.)使用\1
  • Ctrl+V- 将下一个击键作为文字字符转义
  • g- 替换每一行的所有出现
于 2010-12-28T02:44:53.137 回答
2
使用 \P{M}\p{M}* 作为替代。要匹配任意数量的字素,请使用 (?:\P{M}\p{M}*)+ 而不是 \X+

您可以使用

(?:\P{M}\p{M}*)
代替
(.)
在.NET 中。

请参阅正则表达式 - Unicode 字符和属性

于 2010-12-28T02:52:26.933 回答