【发布时间】:2014-02-26 22:25:00
【问题描述】:
我正在使用oracle10g。
我想从句子中删除所有出现的特定单词,但我不想删除包含 a-z 或 A-Z 之间其他字符的任何其他单词。
例如,下面是我要删除的句子some:
some text, 123 someone, another text some1
预期输出:
text, 123 someone, another text
请注意,如果some 单词包含some+ 除了A-Z 和a-z 在some 之前或之后的任何其他单词,我还想删除它。
这是我迄今为止尝试过的:
select replace('some text, 123 someone, another text some1','some','')
from dual;
我得到了输出:
text, 123 one, another text 1
在上面的输出中,我希望 someone 不会被替换,some1 应该被完全替换。
我应该如何做到这一点?任何建议将不胜感激。
编辑:为清楚起见,这是我正在寻找的另一个示例:
some other text someone other text, someB some1 some.
输出应该是:
other text someone other text, someB
从上面的句子someB 没有被删除,因为它在a-z 之间有字符
并且some1 和some. 被删除,因为它在a-z 之间没有字符。
编辑2
如果我使用正则表达式:
select REGEXP_REPLACE('some text, 123 someone, another text some1','[^a-zA-Z]','')
from dual
我得到了输出:
sometextsomeoneanothertextsome
预期输出:
sometextsomeoneanothertext
请注意,我希望 some1 也从字符串中删除,因为它包含除 A-Z 之外的其他字符。
也感谢使用regex 的答案。
【问题讨论】:
-
您是否也必须处理“真实”序列?例如。序列,其中“some”是句子中的第一个词或最后一个词,因此可能前面没有任何内容/后面是句号“。”等等?
-
@FrankSchmitt 我想从句子中删除每个
some,无需处理序列。每个some不包含some+在A-Z和a-z之间的开头和结尾的单词。