如何修正正则表达式以适配所有冗余文本去除场景?技术求助
修正正则表达式适配所有冗余符号去除场景
需求场景
需要去除特定格式的冗余符号与文本,具体示例如下:
{{c1::TEXT TO KEEP}} -> TEXT TO KEEP {{c1::TEXT TO KEEP::}} -> TEXT TO KEEP {{c1::TEXT TO KEEP::some text}} -> TEXT TO KEEP {{c1::FIRST TEXT TO KEEP::some text}} SECOND TEXT TO KEEP {{c2::THIRD TEXT TO KEEP::}} -> FIRST TEXT TO KEEP SECOND TEXT TO KEEP THIRD TEXT TO KEEP
原正则问题
你编写的正则表达式 \{{2}c\d::(.+)(::.*)\}{2}(替换为 $1),仅能匹配第二、第三种带::后缀的场景,无法适配第一种无后缀的情况,也处理不好第四种混合正常文本与多标签的场景。
修正后的正则方案
使用以下正则表达式,替换内容仍设为 $1 即可覆盖所有场景:
{{c\d::(.*?)(?:::.*?)?}}
逻辑说明
{{c\d:::精准匹配开头的标签格式,\d兼容c1、c2这类带数字的标签(.*?):非贪婪匹配要保留的核心文本,避免过度匹配到后面的::或闭合符}}(?:::.*?)?:把::及后续冗余内容设为可选匹配(?表示这部分可有可无),同样用非贪婪匹配确保停在}}前}}:匹配标签的闭合符号
这个正则能完美适配所有场景:
- 第一种无
::的场景:直接抓取{{cX::到}}之间的文本 - 第二、三种带
::的场景:跳过::及后面的冗余内容,只保留前面的目标文本 - 第四种混合场景:可以多次匹配不同的
{{cX::...}}标签,同时保留标签外的正常文本
内容的提问来源于stack exchange,提问作者Eugen N
相关产品推荐
相关产品推荐

