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

Oracle SQL Developer正则表达式求助:格式化提取描述列姓名子串

正则表达式优化方案

原始数据

my testing on 456897 - Carol M. Smith, Ph.D. 
my testing on 435670 - Ms. Paulina M. Hall
my testing on 980765 - Mr. John Smith
my testing on 14567 - Mrs. Lena C. Callum
my testing on 555777 - Dr. Paul F. Fairlake
234567 - Mr. Ryan M. Palmer, Sr.
123456 - Joyce R. Hilton, Ph.D.

期望格式化结果

my testing on 456897 - C.Smith 
my testing on 435670 - Ms. P. Hall
my testing on 980765 - Mr. J. Smith
my testing on 14567 - Mrs. L. Callum
my testing on 555777 - Dr. P. Fairlake
234567 - Mr. R. Palmer
123456 - J. Hilton

优化后的SQL查询

SELECT description,
       REGEXP_REPLACE(
           description,
           '^(.* - )(?:(Mr\.|Ms\.|Mrs\.|Dr\.) )?([A-Z])[a-z]+(?: [A-Z]\.)? ([A-Za-z]+)(?:, .*)?$',
           '\1\2 \3. \4'
       ) AS order_regex
FROM mytable;

正则逻辑说明

  • ^(.* - ):匹配并保留开头到-的所有前缀内容,比如my testing on 456897 - 或234567 -
  • (?:(Mr\.|Ms\.|Mrs\.|Dr\.) )?:可选匹配头衔(非捕获组加?表示该部分可存在可不存在),若存在则捕获头衔文本
  • ([A-Z])[a-z]+:捕获名字的首字母,忽略首字母后的小写名字部分
  • (?: [A-Z]\.)?:可选匹配中间名缩写(如M.),不捕获该部分
  • ([A-Za-z]+):捕获完整姓氏
  • (?:, .*)?$:忽略姓氏后的所有后缀内容(如, Ph.D.、, Sr.)

这个正则可以一次性处理所有场景,无需分CASE判断,自动适配有无头衔、有无中间名、有无后缀的记录。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.25 16:20:34