regex - 我如何为 postgresql 编写这个正则表达式?

标签 regex postgresql

我该如何编写这个正则表达式?

来源 => 'fo3o321bar423ba 234 z' 结果 => "fo 3 o 321 bar 423 ba 234 z"

select regexp_replace(trim(regexp_replace(trim(regexp_replace('fo3o321bar423ba 234 z', E'([a-z]*[0-9]*)', E'\\1 ', 'g')), E'([0-9]*[a-z]*)', E'\\1 ', 'g')),'[\s.]+', ' ', 'g')

最佳答案

您可以使用以下 regexp_replace 实现您想要的:

SELECT regexp_replace('fo3o321bar423ba 234 z', '([^0-9]|^)([0-9]+)(?=[^0-9]|$)', '\1 \2 ', 'g');

参见 demo

结果:fo 3 o 321 bar 423 ba 234 z

正则表达式匹配:

  • (^|[^0-9]) - 字符串或非数字的开头并存储在第 1 组中
  • ([0-9]+) - 1 个或多个数字
  • (?=[^0-9]|$) - 先行检查之后是否有非数字或字符串结尾。

替换字符串 - '\1\2 ' - 返回引用在带有 (...) 的模式中定义的捕获组 1 和 2。

'g' 表示我们要替换所有出现的地方,而不仅仅是第一个。

关于regex - 我如何为 postgresql 编写这个正则表达式?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31863266/

相关文章:

database - 在 Docker 中启动和填充 Postgres 容器

java - 如何挽留。 java正则表达式中的点

java - 替换句号\\。与空间\。空间

regex - 字符串中除 `in` , `the` `of` 之外的每个单词的首字母大写

ruby-on-rails - 在本地主机上设置 Rails 项目,postgresql 问题

sql - 在表格的每一行中找到最小值的优雅方法是什么?

javascript - 从字符串末尾删除空格不起作用

c++ - 正则表达式 - 将所有内容与末尾的数字匹配

sql - 从另一个表更新一个表

postgresql - 如何在不删除和重新创建的情况下使用 ON DELETE CASCADE 更新表