我尝试将以下字符串拆分为行,以便每个单词都在自己的行中,但单个字符的单词(例如 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/