You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用MariaDB查询为小写字母/数字、句号与大写字母间添加空格

批量修正产品描述中的标点空格问题

我花了一周处理包含103,927个产品的数据馈送文件,解决了数千处语法错误,现在卡在一个需求上:需要在小写字母/数字、句号与大写字母之间添加空格。

核心限制:描述里包含小数数值和HTTP地址,不能直接将所有句号替换为「句号+空格」;且必须替换每条记录里的所有符合规则的实例,但我编写的代码仅能修改第一个匹配项。

我有MySQL编程基础,但对正则表达式不太熟悉,试过以下代码(正则已在regex101和Notepad++中验证):

第一次尝试的代码

SELECT REPLACE(`desc`, REGEXP_SUBSTR(`desc`, '[A-Za-z0-9]\.[A-Z]'), REGEXP_SUBSTR(`desc`, '[A-Za-z0-9]\.\s[A-Z]')) FROM `build_datafeed` WHERE `desc` IS NOT NULL

结果:仅修改首个无空格的句号实例,例如将use.This改为ushis。

第二次尝试的代码

SELECT REPLACE(`desc`, REGEXP_SUBSTR(`desc`, '[A-Za-z0-9]\.[A-Z]'), CONCAT(REGEXP_SUBSTR(`desc`, '[A-Za-z0-9]\.'), REGEXP_SUBSTR(`desc`, '\s[A-Z]'))) FROM `build_datafeed` WHERE `desc` IS NOT NULL

结果:仍然仅修改首个实例,例如将use.This改为use. uhis,未达到预期效果。

我试过REPLACE、SUBSTR、REGEXP_REPLACE、REGEXP_SUBSTR的多种组合,也用PHP处理过,但速度过慢。寻求可行的解决办法。


环境信息

  • Server Host: localhost (127.0.0.1)
  • Server OS: Windows NT DESKTOP-4B8U62U 10.0 build 19045 (Windows 10) AMD64
  • Server Date: 06/07/2024 11:39:28
  • Server Up Time: Unsupported
  • HTTP Server: Apache/2.4.54 (Win64) OpenSSL/1.1.1p PHP/8.0.23
  • PHP Version: 8.0.23 (Zend: 4.0.23)
  • PHP File Uploads: On
  • Upload Max Size: 512M
  • PHP Memory Limit: -1
  • POST Max Size: 1024M
  • Database Engine: MySQL 10.4.25-MariaDB
  • Database Host: localhost (127.0.0.1)
  • Database Date: 06/07/2024 11:39:28
  • Database Data Size: 361,500 kB
  • Database Index Size: 50,015 kB
  • MySQL Slow Query Log Status: Off
  • MySQL Mode: NO_ZERO_IN_DATE, NO_ZERO_DATE, NO_ENGINE_SUBSTITUTION

内容的提问来源于stack exchange,提问作者Mike

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.22 16:38:26