使用正则表达式将崇高文本片段中的重音字符翻译成非重音字符



我正在编写一个插入带有标签的subsection{}的 ST3 代码段。标签是通过使用(相当长的)正则表达式转换标题文本以符合标签的 LaTeX 标准来创建的:

${1/(?:([ t_]+)?|b)(?:([ÅÄÆÁÀÃ])?|b)(?:([åäæâàáã])?|b)(?:([ÉÈÊË])?|b)(?:([éèëê])?|b)(?:([ÌÌÎÏ])?|b)(?:([íìïî])?|b)(?:([Ñ])?|b)(?:([ñ])?|b)(?:([ÖØÓÒÔÖÕ])?|b)(?:([öøóòôõ])?|b)(?:([ÜÛÚÙ])?|b)(?:([üûúù])?|b)/(?1:-)(?2:A)(?3:a)(?4:E)(?5:e)(?6:I)(?7:i)(?8:N)(?9:n)(?10O)(?11:o)(?12:U)(?13:u)/g}

实际上,我希望它更长。但是,如果我添加我想要的额外组,那么当我执行代码片段时,ST3 就会崩溃。

${1/(?:([ t_]+)?|b)(?:([ÅÄÆÁÀÃ])?|b)(?:([åäæâàáã])?|b)(?:([Ç])?|b)(?:([ç])?|b)(?:([ÉÈÊË])?|b)(?:([éèëê])?|b)(?:([ÌÌÎÏ])?|b)(?:([íìïî])?|b)(?:([Ñ])?|b)(?:([ñ])?|b)(?:([ÖØÓÒÔÖÕ])?|b)(?:([öøóòôõ])?|b)(?:([ÜÛÚÙ])?|b)(?:([üûúù])?|b)(?:([Ý])?|b)(?:([ÿý])?|b)/(?1:-)(?2:A)(?3:a)(?4:C)(?5:c)(?6:E)(?7:e)(?8:I)(?9:i)(?10:O)(?11:o)(?12:N)(?13:n)(?14:U)(?15:u)(?16:Y)(?17:y)/g}

有没有更有效的方法呢?最好是不会导致 ST3 崩溃;)

编辑:下面是一些示例字符串:

Flygande bæckasiner søka hwila på mjuka tuvor
Åke Staël hade en överflödig idé 

结果(使用当前有效的正则表达式):

Flygande-backasiner-soka-hwila-pa-mjuka-tuvor
Ake-Stael-hade-en-overflodig-ide

但我也想用它们的非重音对应物 (CcYyy) 替换字符 (Ççýÿý),以便例如

Comment ça va

成为

Comment-ca-va
我不知道

这种语法,但我怀疑问题来自太多的可选组以及导致处理过于复杂的许多替代方案。

所以你可以尝试像这样设计你的模式,你可以用同样的方式添加其他字母组(看看 unicode 表来查找字符范围):

${1/([ t_]+)|([À-Å])|([à-å])|([È-Ë])|([è-ë])|([Ì-Ï])|([ì-ï])|([Ò-ÖØ])|([ò-öø])|([Ù-Ü])|([ù-ü])|(Æ)|(æ)|(Œ)|(œ)|(Ñ)|(ñ)/(?1:-)(?2:A)(?3:a)(?4:E)(?5:e)(?6:I)(?7:i)(?8:O)(?9:o)(?10:U)(?11:u)(?12:AE)(?13:ae)(?14:OE)(?15:oe)(?16:N)(?17:n)/g}

如果"前瞻"功能可用,则可以改进此模式,以防止使用每种替代项测试非重音字符:

${1/(?=[ t_À-ÆÈ-ÏÑ-ÖØ-Üà-æè-ïñ-öø-üŒœ])(?:([ t_]+)|([À-Å])|([à-å])|([È-Ë])|([è-ë])|([Ì-Ï])|([ì-ï])|([Ò-ÖØ])|([ò-öø])|([Ù-Ü])|([ù-ü])|(Æ)|(æ)|(Œ)|(œ)|(Ñ)|(ñ))/(?1:-)(?2:A)(?3:a)(?4:E)(?5:e)(?6:I)(?7:i)(?8:O)(?9:o)(?10:U)(?11:u)(?12:AE)(?13:ae)(?14:OE)(?15:oe)(?16:N)(?17:n)/g}

注意:Æ(Aelig)必须音译为AEŒ=> OE相同)

相关内容

最新更新