首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在第二个下划线和最后一个下划线之间获取字符串的正则表达式

在第二个下划线和最后一个下划线之间获取字符串的正则表达式
EN

Stack Overflow用户
提问于 2022-02-19 16:51:28
回答 1查看 202关注 0票数 1

我想得到所有字符之间的第二个下划线和最后下划线之间的字符串,任何想法,这是如何可以实现的。我将在spark中的regex_extract函数中使用这个正则表达式。

代码语言:javascript
运行
复制
Examples
Input                                                                                       Output                     
Problem_ISOAPAPattern_Pat_2nd_byUser-withAllRoles_351107b7-88eb-4232-9107-b788eb92325b    Pat_2nd_byUser-withAllRoles     

Problem_ISOACompressionPattern_pattern 7cbc_7cbce13c-0b25-49a4-bce1-3c0b2569a411          pattern 7cbc 
//doing spark code to extract
spark.sql("select regexp_extract(values, '^(?:[^_]+_){2}([^_ ]+)', 1) pname from san2").show(false)

演示网址:https://regex101.com/r/BipSW8/1

你知道regex应该是什么样子吗

EN

Stack Overflow用户

回答已采纳

发布于 2022-02-19 18:10:43

您可以使用

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

第二个正则表达式等于

代码语言:javascript
运行
复制
^(?:[^_]*_){2}([^_]*(?>_[^_]*)*)_

regex #1演示regex #2演示。第二种方法比第一种方法更有效,因为它不允许太多的回溯。

第一个正则表达式使用(.+)_,一个贪婪的点模式先抓取整条线,然后进行回溯,使正则表达式引擎沿着产生字符的字符串后退一步,找出_的最右边出现,然后给出结果。

第二个正则表达式匹配_以外的字符(与[^_]*匹配),然后匹配零或多个_序列,然后在不允许返回到[^_]*+模式的情况下匹配尽可能多的零或多个字符( _除外)。

票数 2
EN
查看全部 1 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/71187077

复制
相关文章

相似问题

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