首页 > 解决方案 > 正则表达式 - 删除一行(英文)并将其附加到上线的末尾(韩文)

问题描述

我有如下文字:

아니다
bukan

싫다
tidak suka

훌륭하다
bagus

我正在尝试删除英文行(英文字母)并将其附加到上线(韩文字母)的末尾,如下所示:

아니다bukan

싫다tidak suka

훌륭하다bagus

现在,终于找到了几乎接近的正则表达式,就是这样:

[가-힣]\R

但是,它使文本文件如下所示:

아니bukan

싫tidak suka

훌륭하bagus

问题是也删除了韩语的一个词。

我怎么解决这个问题?

标签: c++regextext

解决方案


C++std::regex不支持 Unicode 属性类\p{Hangul},但您可以使用等价的字符类[\u1100-\u11FF\u302E\u302F\u3131-\u318E\u3200-\u321E\u3260-\u327E\uA960-\uA97C\uAC00-\uD7A3\uD7B0-\uD7C6\uD7CB-\uD7FB\uFFA0-\uFFBE\uFFC2-\uFFC7\uFFCA-\uFFCF\uFFD2-\uFFD7\uFFDA-\uFFDC],请参阅此参考

此外,\R也不支持。您可能只是\r?\n用来匹配 Windows/Linux 样式的行尾,或者(?:\r\n?|\n)也支持 MacOS 行尾。

接下来,如果你匹配并消费了一个韩文字符,在替换时,你需要将它捕获到一个捕获组中,并在替换模式中使用对该组的反向引用。

所以,你可以使用

([\u1100-\u11FF\u302E\u302F\u3131-\u318E\u3200-\u321E\u3260-\u327E\uA960-\uA97C\uAC00-\uD7A3\uD7B0-\uD7C6\uD7CB-\uD7FB\uFFA0-\uFFBE\uFFC2-\uFFC7\uFFCA-\uFFCF\uFFD2-\uFFD7\uFFDA-\uFFDC])(?:\r\n?|\n)

替换$1为将韩语字符放回结果字符串中。

在线查看正则表达式演示


推荐阅读