正则表达式:如何仅删除未闭合方括号行及无括号行的感叹号?
精准删除指定行感叹号的正则解决方案
问题场景
目标文本如下,需要保留第一行的!,删除第二、三行的!:
[some text !]
[some text !
some text !
原正则失效原因
你尝试的(?<!\[.*)(!)(?!.*\])无法正常工作,核心是多数正则引擎的后行断言不支持无限长度量词(如.*),且该表达式逻辑未区分行结构,无法精准定位目标!。
可行正则方案
方案1:按行结构匹配(推荐)
利用第一行是完整[...!](行尾带])的特征,匹配不在闭合[]行内的!:
!(?![^\[]*\])
逻辑解释:匹配后面没有](且中间无新的[)的!,刚好命中第二、三行的目标符号。将匹配结果替换为空即可完成需求。
方案2:按行位置匹配
若明确要删除除第一行外所有行的!,可开启多行模式(m修饰符)后使用:
!(?<!^.*!\]$)
逻辑解释:匹配不在以[开头、包含!且行尾是]的行中的!,即排除第一行的!。
内容的提问来源于stack exchange,提问作者akhiler
相关产品推荐
相关产品推荐

