当前使用的命令:
regexp_replace(b.DOWNCASE_NAME, '[^\w\s]', '', 'g') as CONDITION_NAME_DC
那将把“卵巢sertolileydig细胞瘤”变为“卵巢sertolileydig细胞瘤”。还将“遗传性乳腺癌/卵巢癌(brca1,brca2)”更改为“遗传性乳腺癌brca1 brca2”。
我不明白为什么要删除“ sertoli-leydig”中的破折号并将其放入一个单词而不是在两者之间留一个空格。在regexp_replace中,如果我在''之前的''之前加一个空格,那么它在“遗传性乳腺癌brca1 brca2”中也会加倍。
我不需要双倍空格,我只想要一个空格。任何想法在这里做什么?
答案 0 :(得分:0)
我不明白为什么要删除“ sertoli-leydig”中的破折号并将其放入一个单词而不是在两者之间留一个空格。
因为那是您告诉它要做的。当您告诉您不要这样做时,为什么会在两者之间留一个空格?
用一个空格替换标点符号,但是捕获标点符号周围已经存在的所有空格,以便它们也被该单个空格替换。
regexp_replace(b.DOWNCASE_NAME, ' *[^\w\s] *', ' ', 'g');
答案 1 :(得分:0)
您的RE(表9-19。正则表达式类-速记转义符)表示删除\ w或\ s类中不包括的所有内容。现在\ s只是一个空格,\ w保留所有字母数字字符和下划线(_),因此您的RE既不保留破折号(-)也不保留(/)。展开RE来保留这些字符:
with b (downcase_name) as
(values ('ovarian sertoli-leydig cell tumor')
, ('hereditary breast/ovarian cancer (brca1, brca2)')
)
select downcase_name, regexp_replace(b.downcase_name, '[^\w\s\-/]', '', 'g') as name_dc
from b;