如何在Business Objects Web Intelligence 4.2中提取第N个2C匹配模式
提取Business Objects 4.2中每行所有"2C"开头的10位匹配项
你的现有变量已经能成功提取第一个匹配项,要提取后续的内容,核心思路是每次在上一个匹配项结束的位置之后继续查找,这样就能自动忽略已经提取过的部分。下面是具体的变量创建步骤,完全适配你的需求:
步骤1:完善基础变量(记录第一个匹配的结束位置)
先新增一个变量,用来记录第一个"2C"匹配项结束的位置,为后续查找做铺垫:
2cEnd1 = If([2cPat] = 0; 0; [2cPat] + 10)
- 逻辑说明:如果没找到第一个"2C",结束位置设为0;否则第一个匹配从
[2cPat]开始,长度10,所以结束位置是起始位置+10。
步骤2:提取第二个匹配项(2C Ref #2)
需要两个变量配合定位并提取第二个匹配:
- 查找第二个"2C"在剩余字符串中的位置:
2cPat2 = Pos(Substr([Service Item Value]; [2cEnd1] + 1); "2C")
- 逻辑说明:从第一个匹配结束的下一个位置截取字符串,然后在这个子串里找"2C"的起始位置。
- 提取第二个10位匹配项:
2C Ref #2 = If([2cPat2] = 0; ""; Substr([Service Item Value]; [2cEnd1] + [2cPat2]; 10))
- 逻辑说明:如果没找到第二个"2C"就返回空;否则用第一个结束位置加上子串里的位置,得到原字符串中的起始位置,再截取10位内容。
步骤3:提取第三个及更多匹配项(以此类推)
按照同样的逻辑,重复创建变量即可提取后续的匹配项,比如第三个:
- 记录第二个匹配的结束位置:
2cEnd2 = If([2cPat2] = 0; [2cEnd1]; [2cEnd1] + [2cPat2] + 9)
- 这里用
+9是因为[2cPat2]是子串中的起始位置,加上9刚好对应10位内容的结束位置,和原字符串的位置计算完全匹配。
- 查找第三个"2C"的位置:
2cPat3 = Pos(Substr([Service Item Value]; [2cEnd2] + 1); "2C")
- 提取第三个匹配项:
2C Ref #3 = If([2cPat3] = 0; ""; Substr([Service Item Value]; [2cEnd2] + [2cPat3]; 10))
你可以复制这个逻辑,继续创建2C Ref #4、2C Ref #5等变量,直到覆盖你数据中最多的匹配次数。
验证你的示例数据
用你提供的第一行数据E2E: 2C03144250 ; Site 1: 2C03144220; Site 2: 2C03144245 ...测试:
2C Ref #1提取2C031442502C Ref #2提取2C031442202C Ref #3提取2C03144245
完全符合你的预期需求。
注意:如果你的"2C"匹配项存在特殊嵌套情况(比如"2C"出现在其他非目标字符串中),可以再微调逻辑,但根据你的示例数据,这个方案完全适用。
内容的提问来源于stack exchange,提问作者Raul Gonzales
相关产品推荐
相关产品推荐

