知识库

从字符串中提取字符分隔的子字符串


发布时间: 13 Dec 2013
上次修改日期: 11 Mar 2024

问题

如何从较大的字符串中提取由特定开始字符和结束字符分隔的字符串。

环境

  • Tableau Desktop

答案

以下说明介绍如何从长字符串中提取子字符串,可以在附带的工作簿中查看
  1. 选择“分析”>“创建计算字段”
  2. 在打开的“计算字段”对话框中:
    • 命名此计算字段。在示例工作簿中,该计算字段名为“Substring”(子字符串)
    • 在公式字段中,创建类似于如下的计算字段:
      IF CONTAINS([<Dimension>], '<Identifying Character 1>') THEN
      MID(
          [<Dimension>],
          FIND([<Dimension>],'<Identifying Character 1>') + 1,
          FIND([<Dimension>],'<Identifying Character 2>') - (FIND([<Dimension>],'<Identifying Character 1>') +1)
      )
      END
      
  3. 单击“确定”
  4. 将“Substring”(子字符串)拖到“行”功能区。

其他信息

  • 此计算不包括最终子字符串中的标识字符。若要包括标识字符,请在上面的计算中移除两个位置中的“+1”。
  • 使用 CONTAINS([<Dimension>], '<Identifying Character 1>') 条件的 IF 语句筛选出不包含第一个标识字符的任何字符串。这是必要的,因为如果找不到字符,FIND() 将返回 0,这仍然是 MID() 的有效起始位置。
  • “Identifying Character 1”将位于所需子字符串的开头。
  • “Identifying Character 2”将位于所需子字符串的结尾。
  • 当尝试查找同一字符的两个实例之间的子字符串时(例如,字符串“the *dog* is brown”中的“dog”),请对第二个实例使用 FINDNTH() 而不是 FIND()。这可能类似于:
    • MID(
          [<Dimension>],
          FIND([<Dimension>],'<Identifying Character>') + 1,
          FINDNTH([<Dimension>],'<Identifying Character>', 2) - (FIND([<Dimension>],'<Identifying Character>') +1)
      )
      
此文章是否已解决问题?