正则表达式 - 尝试从字符串中提取 5 位单词(presto)

Posted

技术标签:

【中文标题】正则表达式 - 尝试从字符串中提取 5 位单词(presto)【英文标题】:Regex - trying to get the 5 digit words extracted from the string (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' 没有方括号和逗号 【参考方案1】:

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

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

请参阅regex demo。

详情

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

【讨论】:

以上是关于正则表达式 - 尝试从字符串中提取 5 位单词(presto)的主要内容,如果未能解决你的问题,请参考以下文章

使用java创建正则表达式以从字符串中提取4位数字

正则表达式精确匹配 5 位数字

正则表达式精确匹配 5 位数字

在js中使用正则表达式从字符串中提取单词

[使用正则表达式从python文本中提取特定单词

JavaScript 正则表达式 - 从单词旁边提取数字