首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Regex -上一次和最后一次下划线之间的所有内容

Regex -上一次和最后一次下划线之间的所有内容
EN

Stack Overflow用户
提问于 2019-07-05 08:35:36
回答 4查看 235关注 0票数 3

我正在试图制定一个正则表达式,该正则表达式包含了最后一个句号之后的所有内容,直到(不包括)句号之后的下划线3。

例如:

代码语言:javascript
复制
ABC_Simple_DEF.dbo.GDE_1_1_Contact_test

应该返回GDE_1_1

我试过使用[^.]+$,它包含了最后一段时间之后的所有内容。表达式_[^_]+$包括最后下划线和后面的所有内容,这是接近的,但不是我要找的东西。

有点被困在这里,希望能得到任何帮助

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2019-07-05 08:39:16

你可以用

代码语言:javascript
复制
[^._]+(?:_[^._]+){2}(?=_[^.]*$)

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

代码语言:javascript
复制
([^._]+(?:_[^._]){2})_[^.]*$

regex演示#1regex演示2

详细信息

  • [^._]+ - 1+字符( ._除外)
  • (?:_[^._]+){2} - 的两次重复
    • _ -下划线
    • [^._]+ - 1+字符( ._除外)

  • (?=_[^.]*$) -一个积极的展望,它需要_和0+字符,而不是.,直到字符串的末尾,立即在当前位置的右侧。
票数 2
EN

Stack Overflow用户

发布于 2019-07-05 08:39:33

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

代码语言:javascript
复制
(?<=\.)(?!.*\.)(?:[^_]+_){2}[^_]+

解释

  • (?<=\.)负数后面,断言左边的东西不是一个点
  • (?!.*\.)负展望,不要断言后面有更多的点
  • (?:非捕获群
    • [^_]+_匹配1+时间不是下划线,而是_

  • ){2}关闭非捕获组并重复2次
  • [^_]+匹配1+倍而不是_

Regex演示

票数 0
EN

Stack Overflow用户

发布于 2019-07-05 09:22:26

与Wiktor的答案相比略有不同,它需要最后一个句号,并且捕捉到第三个下划线之前的所有内容,或者如果没有三个下划线(为了清晰起见,测试这里),直到结束为止:

代码语言:javascript
复制
\.([^._]*(_[^._]*){0,2})[^.]*$

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

代码语言:javascript
复制
\.(c*(_c*){0,2})c*$
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56899470

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档