正则表达式用破折号、空格破折号、点空间、点和带有空字符串的撇号替换空格
Posted
技术标签:
【中文标题】正则表达式用破折号、空格破折号、点空间、点和带有空字符串的撇号替换空格【英文标题】:Regex to replace space with dash, spacedash, dotspace, dot and apostrophe with empty strings 【发布时间】:2021-09-13 02:02:02 【问题描述】:我正在寻找一种更好的方法来编写以下 SQL 语句,无论是使用 REGEX 还是任何其他方式。
SELECT LOWER(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(SCHOOL_NAME, ' -', ''), '. ', ''), '''', ''), '.', ''), ' ', '-'))
我的意图是应用这些转换:
用破折号代替空格
用空字符串替换 SpaceDash
用空字符串替换撇号
用空字符串替换点空间
用空字符串替换点
我正在处理的字符串示例包括双空格、撇号、破折号:
James valley court ad
Saint's lee park school
Harrison lodge - and hospital
我需要这些字符串变成这样:
james-valley-court-ad
saints-lee-park-school
harrison-lodge-and-hospital
【问题讨论】:
您介意将标题更新为不那么冗长但有意义的内容吗? 第一个替换是'space dash',第二个是'dot space';最后一个用破折号替换空格。这与您的项目符号列表有些不同。您是在寻找 Oracle 正则表达式还是其他一些正则表达式方言? @JeffHolt:原文在第四条规则中有“.Space”。我在第一次编辑中删除了点,但在第二次编辑中将其替换为“DotSpace”。原版是模棱两可的——所有其他字符都被拼出来了,Chrome(至少在我的 Mac 上)很容易在我不想要它们的地方添加点,我认为(我现在错误地认为)这是一个添加点而不是比一个没有拼出来的。 也许我在查询中遗漏了一些东西,但这个例子是我最后想要实现的 我认为更好的标题是“有没有更容易阅读和证明的表达式?”然后您可以引入正则表达式函数作为可能的解决方案。但这听起来有点像 XY 问题,因此您可以解释为什么需要进行转换。当然,整个问题最好发布在software engineering 站点或code review 站点。 【参考方案1】:使用regexp_replace
:
SELECT REGEXP_REPLACE(REPLACE(LOWER(SCHOOL_NAME), '''', ''), '[ .-]+', '-')
见live demo。
将所有个非字母字符转换为连字符:
SELECT REGEXP_REPLACE(REPLACE(LOWER(SCHOOL_NAME), '''', ''), '[^a-z]+', '-')
见live demo。
这两个选项都会根据您的输入生成以下内容:
james-valley-court-ad
saints-lee-park-school
harrison-lodge-and-hospital
【讨论】:
非常有帮助,非常感谢 :)以上是关于正则表达式用破折号、空格破折号、点空间、点和带有空字符串的撇号替换空格的主要内容,如果未能解决你的问题,请参考以下文章