regex - PostgreSQL - 使用 regexp_split_to_table 将单词 (len>1) 拆分为行

标签 regex postgresql

我尝试将以下字符串拆分为行,以便每个单词都在自己的行中,但单个字符的单词(例如 a、i)除外:

"the quick brown fox jumps over a lazy dog"

这是我在 SQL Fiddle 中搞乱的,但我无法得到正确的结果:

SELECT foo FROM regexp_split_to_table('the quick brown fox jumps over a lazy dog',  
  E'(\\s+)(?=\\w{2,})') AS foo;

结果:

the
quick
brown
fox
jumps
over a
lazy
dog

这几乎是正确的,但由于某种原因 a 与 over 结合在一起。我想完全忽略 a。

我缺少什么小东西?

最佳答案

评论中已经提供了一个解决方案:

select regexp_split_to_table('the quick brown fox jumps over a i lazy dog.', '\s+(\w\s+)*');

但是它不考虑标点符号。因此,您不能使用 regexp_matches() 函数从中提取单词,而不是通过分隔符分割字符串:

postgres=# select (regexp_matches('the quick brown fox;jumps over, a lazy dog.', '(\w{2,})', 'g'))[1];
-- or
postgres=# select unnest(regexp_matches('the quick brown fox;jumps over, a lazy dog.', '(\w{2,})', 'g'));
┌────────────────┐
│ regexp_matches │
╞════════════════╡
│ the            │
│ quick          │
│ brown          │
│ fox            │
│ jumps          │
│ over           │
│ lazy           │
│ dog            │
└────────────────┘

关于regex - PostgreSQL - 使用 regexp_split_to_table 将单词 (len>1) 拆分为行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46937574/

相关文章:

Javascript 替换函数(正则表达式)

regex - 有一些好的视觉正则表达式编辑器吗?

mysql - 用户创建的数据库结构: non-relational or relational databases?

PostgreSQL:数据类型小于 smallint?

Python 正则表达式 - 排除某个匹配项

c - 带匹配括号的正则表达式

子组上的 Java 正则表达式

sql - 使用 PostgreSQL 删除基于选择查询中字段的重复行?

node.js - 放置在 Sequelize 中的 WHERE 子句中的值,PostgreSQL 以获取所有内容

postgresql - 增加 RDS 中的预配置 IOPS 会导致停机?