正则表达式需求:移除末尾非日期范围格式的括号内容
移除字符串末尾非日期格式括号内容的正则方案
需求回顾
仅移除位于字符串末尾、且不符合(\d{4}-\d{4})格式(括号内为四位数字日期范围)的括号()及其内容,同时保留末尾的合法日期括号,以及非末尾的所有括号内容。
正确正则表达式
\s*\((?!\d{4}-\d{4}\))[^)]*\)\s*$
正则拆解
\s*:匹配括号前的任意空白字符(空格、制表符等)\(:匹配左括号(?!\d{4}-\d{4}\)):否定前瞻断言,确保括号内不是四位数字-四位数字的合法日期格式[^)]*:匹配括号内的任意非右括号字符(贪婪匹配至右括号)\):匹配右括号\s*:匹配括号后的任意空白字符$:锚定字符串末尾,保证只匹配最后一段内容
替换效果验证
需要移除的场景
- 输入:
foo bar (blah)→ 替换后:foo bar - 输入:
foo bar (blah) blah (blah)→ 替换后:foo bar (blah) blah
无需匹配的场景
- 输入:
some (blah) data→ 括号不在末尾,无匹配 - 输入:
some date following (1920-1921)→ 合法日期格式,否定前瞻生效,无匹配 - 输入:
some data (..) match (match)→ 仅匹配末尾的(match),替换后:some data (..) match - 输入:
some data (1920-1977)→ 合法日期格式,无匹配
内容的提问来源于stack exchange,提问作者menteith
相关产品推荐
相关产品推荐

