0

向所有在这里贡献时间和脑力的人致敬。我正在使用缅甸语文本,资源很少。

为了在 Unicode 中的 Unicode 文本列中使换行正常工作,我想编译一个正则表达式,它将在以下上下文中插入一个零宽度空格 (ZWSP) [u\200B]:

在任何 unicode 字符范围 [\u1000-\u1021] 的示例之前插入 ZWSP

除非

  • 字符后跟 [\u103A]

或者

  • 前一个字符是相同范围的 unicode 字符 [\u1000-\u1021] 或 [\u1039] 之一,(我可能需要稍后添加一两个其他字符)。

任何人都可以帮忙吗?我将在 UltraEdit 中使用大量文本语料库进行查找/替换。

4

1 回答 1

0

Perl 正则表达式搜索字符串

([^\x{1000}-\x{1021}\x{1039}])([\x{1000}-\x{1021}])(?!\x{103A})

与替换字符串一起使用

\1\x{200B}\2

符合您的所有要求。

搜索字符串的解释:

([^\x{1000}-\x{1021}\x{1039}])匹配任何不具有十六进制范围 1000 到 1021 的代码值且不是十六进制代码值 1039 的字符,并标记此字符以通过\1替换字符串中的表达式进行反向引用,因为必须保留此字符。

([\x{1000}-\x{1021}])匹配代码值在 0x1000 到 0x1021 范围内的任何字符,并标记该字符以供替换字符串中的表达式反向引用,\2因为该字符也必须保留。

(?!\x{103A})是一个否定的前瞻表达式,检查下一个字符是否没有十六进制代码值 103A。

替换字符串的解释:

\1引用搜索字符串中第一个标记组找到的字符。

\x{200B}指定要插入的零宽度空间。

\2引用搜索字符串中第二个标记组找到的字符。

于 2013-12-23T14:42:27.417 回答