Regex-最后一个句点和最后一个下划线之间的所有内容

Regex-最后一个句点和最后一个下划线之间的所有内容,regex,Regex,我正在尝试制定一个正则表达式,它捕获上一个句点之后的所有内容,直到(不包括)句点之后的下划线3 例如: ABC_Simple_DEF.dbo.GDE_1_1_Contact_test 应返回GDE\u 1\u 1 我试过使用[^.]+$,其中包括上一个句点之后的所有内容。 表达式\u[^\ u]+$包含最后一个下划线和后面的所有内容,很接近,但不完全是我要查找的内容 有点困在这里,如果您能提供帮助,我将不胜感激 [^._]+(?:_[^._]+){2}(?=_[^.]*$) 或者,捕获方法(

我正在尝试制定一个正则表达式,它捕获上一个句点之后的所有内容,直到(不包括)句点之后的下划线3

例如:

ABC_Simple_DEF.dbo.GDE_1_1_Contact_test
应返回
GDE\u 1\u 1

我试过使用
[^.]+$
,其中包括上一个句点之后的所有内容。 表达式
\u[^\ u]+$
包含最后一个下划线和后面的所有内容,很接近,但不完全是我要查找的内容

有点困在这里,如果您能提供帮助,我将不胜感激

[^._]+(?:_[^._]+){2}(?=_[^.]*$)
或者,捕获方法(您需要从结果中获取组1值):

见和

详细信息

  • [^.\]+
    -1+字符,而不是
  • (?:[^.]+){2}
    -两次重复
    • -下划线
    • [^.\]+
      -1+字符,而不是
  • (?=[^.]*$)
    -正向前瞻,需要
    和0+字符,而不是
    ,直到当前位置右侧的字符串末尾

如果支持负向后看,一个选项可以是断言左边的是一个点,并使用负向前看在匹配的点之后不断言更多的点:

(?<=\.)(?!.*\.)(?:[^_]+_){2}[^_]+

(?与Wiktor的答案稍有不同,需要最后一个句点并捕获所有内容,直到第三个下划线,或者如果少于三个,则捕获到最后一个下划线(为了清晰起见,删除非捕获组,测试):

目标捕获组为1。为了更好地可视化,假设您的输入仅包含下划线、句点和字符
c
,则它将变为:

\.(c*(_c*){0,2})c*$
直接的“哑”正则表达式是:

([^.]*\.)*([^_]*_[^_]*_[^_]*).*
您需要分组
\1


测试。

完美,正是我想要的。谢谢!
\.(c*(_c*){0,2})c*$
([^.]*\.)*([^_]*_[^_]*_[^_]*).*