【问题标题】:KDB - Extract pattern from string column in tableKDB - 从表中的字符串列中提取模式
【发布时间】:2020-07-27 21:29:57
【问题描述】:

表“t”有这样的一列:

A 列:

ABC^AW=1a2b3c^FWJOGB

AW=2b3c^NJFW

CDE^AW=3c4d5e5f

目标是提取模式“AW=*”,并在“=”符号后生成一个新列,即

B 列:

1a2b3c

2b3c

3c4d5e5f

谢谢!

【问题讨论】:

    标签: string kdb


    【解决方案1】:

    您可以使用vs 运算符拆分A 列中的每个字符串:

    q)show t:([]A:("ABC^AW=1a2b3c^FWJOGB";"AW=2b3c^NJFW";"CDE^AW=3c4d5e5f"))
    A
    ----------------------
    "ABC^AW=1a2b3c^FWJOGB"
    "AW=2b3c^NJFW"
    "CDE^AW=3c4d5e5f"
    q)update B:first each "^" vs/: last each "AW=" vs/: A from t
    A                      B
    ---------------------------------
    "ABC^AW=1a2b3c^FWJOGB" "1a2b3c"
    "AW=2b3c^NJFW"         "2b3c"
    "CDE^AW=3c4d5e5f"      "3c4d5e5f"
    

    【讨论】:

    • 谢谢!了解这种字符串操作的最佳资源是什么?我花了一些时间在论坛/谷歌上搜索,但仍然没有太多线索..
    • 你可以在 Kx 的网站code.kx.com/q/basics/strings 上找到几个字符串操作。 vs 运算符的文档:code.kx.com/q/ref/vs,以及另一个有价值的运算符,它可以获取字符串列表并将它们与指定的分隔符连接起来:code.kx.com/q/ref/sv
    【解决方案2】:

    虽然我更喜欢 Jorge 的回答,并且我会推荐并在实践中使用它,但另一种可能帮助您重新处理字符串操作的方法是将您的数据视为 key-value pairs

    q)select{((!/)"S=^"0:x)`AW}'[A]from t
    A
    ----------
    "1a2b3c"
    "2b3c"
    "3c4d5e5f"
    

    这个用例有点过头了,但突出了内置运算符的有用性(一旦你知道在哪里看!)。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-07-16
      • 2022-06-10
      • 2021-10-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多