使用 Qlik Regex 组织混乱的评论字段

发布: (2026年2月17日 GMT+8 01:06)
4 分钟阅读
原文: Dev.to

Source: Dev.to

自由文本字段既是福也是祸。
它们为用户提供了灵活性,但从报表的角度来看,这些字段往往杂乱、格式不统一,且难以处理。在本例中,客户有一个 Comments(评论)字段,用户手动输入信息,其中包含了他们在报表中需要的特定代码。

表面上的需求很简单:

从自由文本评论字段中提取代码。

但实际操作中……并不那么简单。

问题

源字段大致如下:

"Breakdown reported – REF12345 vehicle unavailable"
"Job completed ABC 67890 no further action"
"Awaiting parts – no reference provided"

代码的规则是一致的:

  • 3 个大写字母
  • 可选空格
  • 5 位数字

有效代码示例:

  • ABC12345
  • ABC 12345

挑战在于:

  • 代码可能出现在文本的任何位置。
  • 有些记录根本不包含代码。
  • 我们需要一个干净的输出,以便进行过滤和分析。

为什么使用正则表达式?

你可以尝试使用 Mid()Left()Index() 等字符串函数来解决,但当出现以下情况时,这种方法很快就会失效:

  • 代码的位置不固定。
  • 空格不一致。
  • 文本中噪音很多。

正则表达式(regex)正是为这种模式匹配而设计的。

解决方案

下面是我使用的表达式:

Coalesce(
    Replace(
        ExtractRegEx(
            [Comments],
            '[A-Z]{3}\s?\d{5}',
            1
        ),
        ' ',
        ''
    ),
    'NOT FOUND'
)

步骤 1:使用 ExtractRegEx 提取代码

ExtractRegEx(
    [Comments],
    '[A-Z]{3}\s?\d{5}',
    1
)

正则模式

  • [A-Z]{3} → 恰好 3 个大写字母
  • \s? → 可选空格
  • \d{5} → 恰好 5 位数字

这告诉 Qlik:“找出第一个出现的三个字母后跟五个数字的组合,空格可有可无。”
如果没有匹配项,ExtractRegEx() 会返回 NULL

步骤 2:去除空格(如果存在)

Replace(…, ' ', '')

如果原始文本是 ABC 12345,此步骤会将其转换为 ABC12345
输出始终保持一致,这对后续的连接、过滤和比较至关重要。

步骤 3:使用 Coalesce 处理缺失的代码

Coalesce(…, 'NOT FOUND')

当不存在匹配的代码时,ExtractRegEx() 返回 NULL。将所有内容包装在 Coalesce() 中,可将这些 NULL 替换为有意义的值:NOT FOUND。这样可以让结果:

  • 更易于用户理解
  • 更易于在应用中进行过滤
  • 对下游逻辑更安全

最终结果

评论文本提取的代码
Breakdown reported – REF12345 vehicle unavailableREF12345
Job completed ABC 67890 no further actionABC67890
Awaiting parts – no reference providedNOT FOUND

干净、一致,随时可用于分析。

为什么这很重要

在 Qlik 中使用正则表达式可以让你:

  • 从非结构化文本中提取结构化数据
  • 减少手动数据清洗工作
  • 构建更可靠的 KPI 和维度
  • 优雅地处理真实世界中混乱的用户输入

如果你需要处理评论、备注、描述或参考字段,正则表达式是可以加入 Qlik 工具箱的最强大工具之一。

0 浏览
Back to Blog

相关文章

阅读更多 »

编排到底是什么?

引言 我在职业生涯开始时意外进入了流程自动化和编排领域,而某种程度上——更意外的是——我仍然……