如果(且仅当)括号()位于末尾且与下面的模式\(\d{4}\p{Pd}\d{4}\) *不匹配,我想删除所有括号().这种模式只不过是括号中的日期范围,例如.(1920-2988).

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

  • FOO BAR (blah)

  • Foo bar(诸如此类)诸如此类

我不喜欢匹配:

  • 一些(废话)数据
  • 以下是一些日期(1920-1921年).

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

  • 一些数据(..) match (match)
  • 一些数据(1920-1977)

推荐答案

使用负数向前看以避免日期范围,然后使用[^()]+?进行实际匹配:

\s*\(                  # Match 0+ spaces, a '(',
(?!\d{4}\p{Pd}\d{4}\)) # which is not followed by a date range and a ')',
[^()]+                 # 1+ non-parenthesis characters and
\)\s*$                 # ')' then 0+ spaces right before the end of line.

试试看on regex101.com个.

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

parentheses with no content ()
years with more than 4 digits (1234-56789)
or less than 4 (123-4567)
nested ((brackets))
mismatched (brackets

Java相关问答推荐

Java应用程序崩溃时试图读取联系人从电话

Java中不同包中的类之间的配置共享

springboot start loge change

如何以干净的方式访问深度嵌套的对象S属性?

Com.example.service.QuestionService中的构造函数的参数0需要找不到的类型为';com.example.Dao.QuestionDao;的Bean

将响应转换为带值的键

格式中的特定回录键-值对

如何只修改父类ChroniclerView位置0处的第一个嵌套ChroniclerView(child)元素?

如何在 spring 数据的MongoDB派生查询方法中使用$EXISTS

与IntArray相比,ArrayList<;Int>;对于大量元素的性能极差

将关闭拍卖的TimerService

Android应用程序为错误的显示类型 Select 尺寸文件

Java在操作多个属性和锁定锁对象时使用同步和易失性

如何在IntelliJ IDEA的Build.sbt中添加外部JAR文件?

JavaFX复杂项目体系 struct

在ECLIPSE上的M1 Pro上运行JavaFX的问题

JPA无手术同品种器械可能吗?

如何在Java上为循环数组从synchronized迁移到ReentrantLock

如何使用 Java 替换位于特定标记内的 XML 标记的 CDATA 内的值

在Java中,在Object#equals()调用期间,两个对象是否必须具有相同的hashCode?我们是否需要在 equals() 中比较 hashCode?