【发布时间】:2026-02-04 09:30:01
【问题描述】:
我想清理一个字母数字 (varchar2) 记录表。应检查每条记录是否包含一组脏字,以防万一。模式和替换存储在单独的表中。
示例:
create table to_clean (
text_id number,
dirty_text varchar2(4000));
insert into to_clean values(1,'hello this is my dirtyword1 text.');
insert into to_clean values(2,'hello this is my dirtyword3 text.');
insert into to_clean values(3,'hello this is my dirtyword2 dirtyword1 text.');
create table regex_list(
pattern varchar2(400),
replacement varchar2(400));
insert into regex_list values('dirtyword1','clean1');
insert into regex_list values('dirtyword2',' '); --remove totally
insert into regex_list values('dirtyword3','clean3');
伪代码:
for each dirty_text in to_clean
for pattern, replacement in regexlist
regex_replace(dirty_text, pattern, replacement)
在 Oracle 中解决此问题的最有效方法是什么? regex_list 包含正则表达式和纯字符串作为模式。我只想替换完整的单词,而不是部分单词(所以用空格分隔)
【问题讨论】:
-
原来的表要保持不变,所以只有select才需要替换。
-
regex_list表中真的有正则表达式吗?还是只是要替换的字符串?要替换部分单词吗?如果您的to_clean表有一个字符串“Somedirtyword1InTheMiddle”,您想替换它吗?还是只想替换完整的单词? -
regex_list 包含正则表达式和平面字符串作为模式。我只想替换完整的单词,不替换部分单词(因此由以下空格分隔)
-
我假设你的dirty_text 值可能包含多个脏字,例如
'hello this is my dirtyword1 and dirtyword2 text.',对吗? -
是的,这可能发生。