c++ - 正则表达式 - 删除一行(英文)并将其附加到上线的末尾(韩文)
问题描述
我有如下文字:
아니다
bukan
싫다
tidak suka
훌륭하다
bagus
我正在尝试删除英文行(英文字母)并将其附加到上线(韩文字母)的末尾,如下所示:
아니다bukan
싫다tidak suka
훌륭하다bagus
现在,终于找到了几乎接近的正则表达式,就是这样:
[가-힣]\R
但是,它使文本文件如下所示:
아니bukan
싫tidak suka
훌륭하bagus
问题是也删除了韩语的一个词。
我怎么解决这个问题?
解决方案
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
为将韩语字符放回结果字符串中。
在线查看正则表达式演示。
推荐阅读
- python - 沿行复制数据框的行值直到不为空,并进一步复制连续的非空值
- vsto - VSTO Addin 安装的框架无法识别
- javascript - 如果对象键对值不同,如何打印对象值数组
- caching - 应用设置的计时器 WSO2 API 管理器不起作用
- javascript - JSX 元素类不支持属性,因为它没有“道具”property.ts(2607)
- laravel - 如何检查用户可能的选择是否包含结果
- javascript - 如何更改打印对话框中的下拉值?
- python - N-Queen 问题(如果语句不起作用)
- javascript - 如果 db 中的值匹配,如何隐藏 div - Laravel
- javascript - Storybook:如何为作为对象的属性定义 argTypes?