使用 regexp_replace 命令时遇到问题
Trouble using regexp_replace command
当前正在使用的命令:
regexp_replace(b.DOWNCASE_NAME, '[^\w\s]', '', 'g') as CONDITION_NAME_DC
这会将 "ovarian sertoli-leydig cell tumor" 更改为 "ovarian sertolileydig cell tumor"。它还会将 "hereditary breast/ovarian cancer (brca1, brca2)" 更改为 "hereditary breast ovarian cancer brca1 brca2"。
我不明白为什么要删除 "sertoli-leydig" 中的破折号并将其放入一个单词中,而不是在两者之间保留一个 space。在 regexp_replace 中,如果我在 'g' 之前的 ' ' 中放置一个 space,那么它还会在 "hereditary breast ovarian cancer brca1 brca2"[=12= 中放置一个双 space ]
我不需要双 space,我只想要一个 space。有什么想法可以在这里做什么吗?
I do not understand why it is removing the dash in the "sertoli-leydig" and putting it into one word instead of keeping a space in between.
因为那是你告诉它要做的。当你告诉它不要时,为什么它会在中间放一个 space?
用 space 替换标点符号,但捕获标点符号周围已有的任何 space,以便它们也被替换为单个 space。
regexp_replace(b.DOWNCASE_NAME, ' *[^\w\s] *', ' ', 'g');
你的RE(Table 9-19.正则表达式Class-shorthand转义)说要删除\w或\s中不包含的所有内容类。现在 \s 只是一个 space,而 \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;
当前正在使用的命令:
regexp_replace(b.DOWNCASE_NAME, '[^\w\s]', '', 'g') as CONDITION_NAME_DC
这会将 "ovarian sertoli-leydig cell tumor" 更改为 "ovarian sertolileydig cell tumor"。它还会将 "hereditary breast/ovarian cancer (brca1, brca2)" 更改为 "hereditary breast ovarian cancer brca1 brca2"。
我不明白为什么要删除 "sertoli-leydig" 中的破折号并将其放入一个单词中,而不是在两者之间保留一个 space。在 regexp_replace 中,如果我在 'g' 之前的 ' ' 中放置一个 space,那么它还会在 "hereditary breast ovarian cancer brca1 brca2"[=12= 中放置一个双 space ]
我不需要双 space,我只想要一个 space。有什么想法可以在这里做什么吗?
I do not understand why it is removing the dash in the "sertoli-leydig" and putting it into one word instead of keeping a space in between.
因为那是你告诉它要做的。当你告诉它不要时,为什么它会在中间放一个 space?
用 space 替换标点符号,但捕获标点符号周围已有的任何 space,以便它们也被替换为单个 space。
regexp_replace(b.DOWNCASE_NAME, ' *[^\w\s] *', ' ', 'g');
你的RE(Table 9-19.正则表达式Class-shorthand转义)说要删除\w或\s中不包含的所有内容类。现在 \s 只是一个 space,而 \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;