正则表达式匹配数字中具有最小长度的偶数个数字

Regex Matching even number of digits in a number with minimum length

我正在尝试构建一个适用于以下两个示例的正则表达式:

示例 1。202101310000-daily
示例 2. my_merchant_df_20210129

条件是:

  1. 字符串甚至没有。位数(6 位、8 位、10 位等)。
  2. 字符串在一组中包含至少 6 个数字。
  3. 字符串中数字分组的位置无关紧要。

我是正则表达式:[0-9]+ 正在为 202101310000-daily 工作,但我无法创建满足这两个示例的正则表达式。

基本上对于我的用例,有些文件组的日期格式应为 yyyymdyyyymmddyyyymmddHHMMSS。我需要过滤掉文件名中任何位置具有这种格式的文件 正则表达式。

您可以重复 3 组或更多组 2 位数字,并使用否定环视断言匹配的左右两侧没有数字。

(?<!\d)(?:\d\d){3,}(?!\d)
  • (?<!\d) 直接向左断言没有数字
  • (?:\d\d){3,} 重复匹配 2 位数字 3 次或更多次以匹配 6 位数字、8 位数字等..
  • (?!\d) 直接向右断言没有数字

Regex demo

在Java

String regex = "(?<!\d)(?:\d\d){3,}(?!\d)";

为了让它更具体一点,您可以从匹配年份的 19 或 20 开始,然后重复 2 次或更多次 2 位数字组,或者您可以使用交替来匹配所有 exact patterns .

 (?<!\d)(?:19|20)(?:\d{2}){2,}(?!\d)

Regex demo