【问题标题】:Regex - trying to get the 5 digit words extracted from the string (presto)正则表达式 - 尝试从字符串中提取 5 位单词(presto)
【发布时间】:2021-07-16 22:27:28
【问题描述】:

我正在尝试检索括号中的 5 个数字/字母的每个序列,就像这个例子一样:

accuracy of action - [1232d, 74294, qw23t, 23d45, 76wer, 12874] march

我想从中提取1232d 74294 qw23t 23d45 76wer 12874

我知道只提取方括号中的单个 5 位序列我可以做到 \[[a-z0-9 ]{5,7}\] 但我不知道如何检索各种 5 位序列。

【问题讨论】:

  • 看起来您只是想从括号中提取所有连续的“单词”,对吧?或者是否有任何你不想提取的“词”?比如,可以有accuracy of action - [1232d, 76wer111111111, 12874] march吗?然后,你需要提取76wer111111111吗?只是澄清一下,既然你说你想得到“5位数字”,但1232d不是数字词,它包含一个字母。
  • 嘿,谢谢你的回答,我实际上想要 5 个字母和数字的所有连续序列。所以基本上我想要方括号内的所有内容
  • 试试SELECT regexp_extract_all(col, '(?:\G(?!^),\s*|\[)(\w+)(?=[^\]\[]*])', 1);,见this regex demo
  • 您的数据是否按预期工作?
  • 嘿,是的,它确实有效,但我正在尝试找出一种方法,现在将数字/字母序列分成不同的行。所以基本上我想要 1 行 1 '1232d' 没有方括号和逗号

标签: sql regex presto


【解决方案1】:

现在,由于[...] 中的所有单词都由 5 个字母数字字符组成,您可以使用

(?:\G(?!^),\s*|\[)(\w+)(?=[^\]\[]*])

请参阅regex demo

详情

  • (?:\G(?!^),\s*|\[) - 前面成功匹配的结尾和逗号和零个或多个白字符,或者 [ 字符
  • (\w+) - 第 1 组:一个或多个单词字符
  • (?=[^\]\[]*]) - 后跟零个或多个字符,而不是 [],然后是 ]

【讨论】:

    猜你喜欢
    • 2011-03-09
    • 2016-02-24
    • 2017-08-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-03-18
    • 1970-01-01
    • 2021-10-27
    相关资源
    最近更新 更多