2

我想去掉所有括号()如果(并且仅当)它们位于末尾并且不匹配以下模式\(\d{4}\p{Pd}\d{4]\)*此模式只不过是括号中的日期范围,例如。(1920-2988).

例如,我想匹配/捕获(用于删除,即。string.replaceAll(my_regex_here,“”)):

  • foo酒吧(废话)

  • foo酒吧(blah)blah(废话)

我不喜欢匹配:

  • 一些(废话)数据
  • 之后的某个日期(1920-1921)。

我有以下正则表达式:\s*(.+?)\s*$。它往往匹配太多:

  • 一些数据(..)匹配(匹配)
  • 一些数据(1920-1977)
2
  • 有什么理由必须使用一个replaceAll调用而不使用其他代码来执行此操作吗?
    – VGR公司
    评论 2023年6月4日0:09
  • @VGR我想避免使用另一种私有方法来清理字符串(我已经有很多这样的方法了)。
    – 门蒂思
    评论 2023年6月4日7:42

1答案1

重置为默认值
5

使用负向前看来避免日期范围,然后使用[^()]+?:

\s*\(#匹配0+空格,a“(”,(?!\d{4}\p{Pd}\d{4]\))#后面没有日期范围和“)”,[^()]+#1+非父权字符和\)\s*$#“)”,然后在行尾前面有0+个空格。

试试看在regex101.com上.

上述正则表达式将不匹配:

没有内容的括号()四位数以上的年份(1234-56789)或小于4(123-4567)嵌套((括号))不匹配(括号
0

你的答案

单击“发布您的答案”,表示您同意我们的服务条款并确认您已阅读我们的隐私政策.

不是你想要的答案吗?浏览标记的其他问题问你自己的问题.