0

这是字符串的一个例子,它可以更长

1160752 Meranji Oil Sats -Mt(MA) (000600007056 0001),PE:Toolachee Gas Sats -Mt(MA) (000600007070 0003)GL:合同服务 (510000),COT:网络 (N),CO:OM-A00009.0723 ,Oil Sats -Mt(MA) (000600007053 0003)

结果需要是 column1 600007056 column2 600007070 column3 600007053 我在 Spotfire 中工作并通过转换创建计算列,因为我需要将列连接到其他数据集

我已经尝试了以下方法,但它只选择了第 600 个 .. 数字而不是其他数字,并且可能有未定义的数量。

帐户是带有字符串的列

Mid([Account],
    Find("(000",[Account]) + Len("(000"),
    Find("0001)",[Account]) - Find("(000",[Account]) - Len("(000"))

谢谢!

4

1 回答 1

0

假设我的猜测是正确的,并且要查找的模式是:9 个数字,以 6 开头,前面是 1 个左括号和 3 个零,然后是一个空格、4 个数字和一个右括号

您可以通过以下方式获取个别事件:

column1: RXExtract([Amount],'(?<=\\(000)6\\d{8}(?=\\s\\d{4}\\))',1)

column2: RXExtract([数量],'(?<=\\(000)6\\d{8}(?=\\s\\d{4}\\))',2)

等等

棘手的一点是要找到要定义的列数,正如您所说的那样可以有很多。知道的一种方法是首先计算最大出现次数,如下所示:

maxn: Max((Len([Amount]) - Len(RXReplace([Amount],'(?<=\\(000)6\\d{8}(?=\\s\\d{4}\ \))','','g'))) / 9)

仍然假设要提取的每列中的位数为 9。这会将原始 [Amount] 的长度与用空字符串替换的提取模式的长度进行比较,除以 9。

然后您知道您最多可以定义 maxn 列,具有较少实例的行的额外列将是空的。

请注意,Spotfire 总是需要两个反斜杠来转义(我必须在编辑器中添加更多内容以使其正确渲染,我希望我没有错过任何内容)。

于 2021-02-19T15:26:25.283 回答