我该如何编写这个正则表达式?
来源 => '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/