【问题标题】:Regular Expression - removing a line(English) and attaching it to the end of upper line(Korean)正则表达式 - 删除一行(英文)并将其附加到上线的末尾(韩文)
【发布时间】:2018-11-08 05:08:29
【问题描述】:

我的文字如下:

아니다
bukan

싫다
tidak suka

훌륭하다
bagus

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

아니다bukan

싫다tidak suka

훌륭하다bagus

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

[가-힣]\R

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

아니bukan

싫tidak suka

훌륭하bagus

问题是也去掉了韩语的一个词。

我该如何解决这个问题?

【问题讨论】:

    标签: c++ regex text


    【解决方案1】:

    C++ std::regex 不支持像 \p{Hangul} 这样的 Unicode 属性类,但您可以使用等效的字符类 [\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],请参阅 this reference

    此外,\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 将韩语字符放回结果字符串中。

    请参阅regex demo online

    【讨论】:

      【解决方案2】:

      Unicode 中所有韩语字符的正则表达式如下:

      \p{Hangul}
      

      这里有更多信息:https://www.regular-expressions.info/unicode.html

      也许您还需要在您的字符组后面加一个 +?

      使用 [\p{Hangul}]+\R 正则表达式代替您现在使用的。

      【讨论】:

      • @ChanjungKim 怎么没有?你使用的是 Swift 还是 Objective-C?
      • @Wiktor Stribizew C++
      • @ChanjungKim 那么为什么用 Swift/Obj-C nsregularexpression 类标记你的问题呢?我修复了标签。
      • @Wiktor Stribiżew 哦,也许是我的错误。谢谢!
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-05-11
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多