首页 > 解决方案 > 正则表达式 - 最后一个时期和最后一个下划线之间的所有内容

问题描述

我正在尝试制定一个正则表达式来捕获最后一个时期之后的所有内容,直到(不包括)该时期之后的下划线数字 3。

例如:

ABC_Simple_DEF.dbo.GDE_1_1_Contact_test

应该返回GDE_1_1

我试过使用[^.]+$which 包括最后一段时间之后的所有内容。该表达式_[^_]+$包括最后一个下划线和之后的所有内容,这很接近,但不完全是我想要的。

有点卡在这里,希望有任何帮助

标签: regex

解决方案


您可以使用

[^._]+(?:_[^._]+){2}(?=_[^.]*$)

或者,捕获方法(您需要从结果中获取第 1 组值):

([^._]+(?:_[^._]){2})_[^.]*$

请参阅正则表达式演示 #1正则表达式演示 #2

细节

  • [^._]+- 1+ 字符以外的._
  • (?:_[^._]+){2}- 两次重复
    • _ - 一个下划线
    • [^._]+- 1+ 字符以外的._
  • (?=_[^.]*$)- 一个积极的前瞻,需要_0+ 个字符,而不是.直到当前位置右侧的字符串末尾。

推荐阅读