我想得到所有字符之间的第二个下划线和最后下划线之间的字符串,任何想法,这是如何可以实现的。我将在spark中的regex_extract函数中使用这个正则表达式。
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应该是什么样子吗
发布于 2022-02-19 18:10:43
您可以使用
^(?:[^_]+_){2}(.+)_
^(?:[^_]*_){2}([^_]*(?:_[^_]*+)*)_第二个正则表达式等于
^(?:[^_]*_){2}([^_]*(?>_[^_]*)*)_见regex #1演示和regex #2演示。第二种方法比第一种方法更有效,因为它不允许太多的回溯。
第一个正则表达式使用(.+)_,一个贪婪的点模式先抓取整条线,然后进行回溯,使正则表达式引擎沿着产生字符的字符串后退一步,找出_的最右边出现,然后给出结果。
第二个正则表达式匹配_以外的字符(与[^_]*匹配),然后匹配零或多个_序列,然后在不允许返回到[^_]*+模式的情况下匹配尽可能多的零或多个字符( _除外)。
https://stackoverflow.com/questions/71187077
复制相似问题