语法作用
从字符串中返回指定分隔符中间的文本,可使用startIndex参数指定使用第几个起始分隔符,endIndex参数则指定使用第几个结束分隔符,只不过endIndex的起始位置是相对于startIndex后的,分隔符位置从1开始。
XF.Str.BetweenDelimiters(str:string,startDelimiter:string,endDelimiter:string,startIndex:int64,endIndex:int64)
函数代码
该函数的实现代码如下:
/// 从字符串中返回指定分隔符中间的文本,可使用startIndex参数指定使用第几个起始分隔符,endIndex参数则指定使用第几个结束分隔符,只不过endIndex的起始位置是相对于startIndex后的
FUNCTION XF.Str.BetweenDelimiters = (str:string,startDelimiter:string,endDelimiter:string,startIndex:int64,endIndex:int64) =>
IF(startIndex<1 || endIndex<1,
ERROR("startIndex与endIndex参数应大于或等于1"),
VAR StartDelimiterIndex =
DISTINCT(
FILTER(
SELECTCOLUMNS(
GENERATESERIES(1,LEN(str)),
"Position",FIND(startDelimiter,str,[Value],BLANK())
),
[Position]<>BLANK()
)
)
VAR StartDelimiterIndex_AddRank =
ADDCOLUMNS(
StartDelimiterIndex,
"Rank",RANKX(StartDelimiterIndex,[Position],,1)
)
VAR StartIndex = COALESCE(MAXX(FILTER(StartDelimiterIndex_AddRank,[Rank]=startIndex),[Position]),LEN(str))
VAR RightText = RIGHT(str,LEN(str)-StartIndex)
VAR TransToPath = SUBSTITUTE(RightText,endDelimiter,"|")
RETURN
CONCATENATEX(
ADDCOLUMNS(
GENERATESERIES(1,MIN(endIndex,PATHLENGTH(TransToPath))),
"SubStr",PATHITEM(TransToPath,[Value])
),
[SubStr],
endDelimiter,
[Value],ASC
)
)
应用示例
示例1:
获取 "111 (222) 333 (444)" 第二个左括号及其随后第一个右括号之间的部分。
XF.Str.BetweenDelimiters("111 (222) 333 (444)","(",")",2,1)
结果如下:
"444"
示例2:
获取 "111 (222) 333 (444)" 第一个左括号及其随后第二个右括号之间的部分。
XF.Str.BetweenDelimiters("111 (222) 333 (444)","(",")",1,2)
结果如下:
"222) 333 (444"