如何调整正则replace参数实现西里尔字母转小写?
问题
我需要将文本中的拉丁字母全部转为小写,但西里尔字母(无论原本是大写还是小写)都保持大写状态。现有正则匹配规则和替换参数如下,当前结果中西里尔字母的小写部分未转换为大写,请问如何修改替换参数实现需求?
待处理文本
WWWWWWWWW wwwwwWWWWWWWwwwwwww wwwwwwwwwwwwww ЫЫЫЫЫЫЫЫЫЫЫ ыыыыыыыыЫЫЫЫЫЫЫЫЫыыыыыыыы
当前匹配规则(Find)
(\w+|[ыЁёА-я]+)
当前替换参数(Replace)
\L$1
当前结果
wwwwwwwww wwwwwwwwwwwwwwwwwww wwwwwwwwwwwwww ЫЫЫЫЫЫЫЫЫЫЫ ыыыыыыыыЫЫЫЫЫЫЫЫЫыыыыыыыы
解决方案
修改替换参数为条件替换语法,针对匹配到的内容区分处理:如果是拉丁字母则转为小写,是西里尔字母则转为大写。替换参数如下:
(?(?=\p{Latin})\L$1|\U$1)
原理说明
(?(condition)true-branch|false-branch):PCRE正则的条件替换结构,满足判断条件时执行对应分支逻辑(?=\p{Latin}):正向预查,判断当前捕获组内容是否为拉丁字母\L$1:将捕获组内的拉丁字母转为小写\U$1:将捕获组内的西里尔字母统一转为大写,覆盖原本的小写状态
修改后的预期结果
wwwwwwwww wwwwwwwwwwwwwwwwwww wwwwwwwwwwwwww ЫЫЫЫЫЫЫЫЫЫЫ ЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫ
内容的提问来源于stack exchange,提问作者Comrade Che
相关产品推荐
相关产品推荐

