正则表达式 - 尝试从字符串中提取 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)的主要内容,如果未能解决你的问题,请参考以下文章