问题描述
嗨,汤姆,
提前谢谢。我正在尝试将裸十进制替换为 “0”。
这是示例。
字符串: '.45毫升-.91毫升-25微克/.5毫升-.9毫升 (.3毫升)-25.5毫升或.45毫升
每次出现的裸小数点都应替换为 “0”。导致
'0.45毫升-0.91毫升-25微克/0.5毫升-0.9毫升 (0.3毫升)-25.5毫升或0.45。请注意,字符串中的25.5不是裸十进制,并保持不变。
我试图使用替换功能来实现,但对解决方案并不完全有信心。
我们可以使用regexp_replace实现此目的,还是有更好的方法来做到这一点。
谢谢
提前谢谢。我正在尝试将裸十进制替换为 “0”。
这是示例。
字符串: '.45毫升-.91毫升-25微克/.5毫升-.9毫升 (.3毫升)-25.5毫升或.45毫升
每次出现的裸小数点都应替换为 “0”。导致
'0.45毫升-0.91毫升-25微克/0.5毫升-0.9毫升 (0.3毫升)-25.5毫升或0.45。请注意,字符串中的25.5不是裸十进制,并保持不变。
我试图使用替换功能来实现,但对解决方案并不完全有信心。
with str_rec as (
SELECT
'.45ML-.91ML-25MCG/.5ML-.9ML(.3ML)-25.5ML or .45' str
from dual
)
select case when substr(str, 1, 1) = '.' then
regexp_replace(replace(
replace(
replace(
replace(
replace( str, ' .', ' 0.'),
'/.', '/0.'),
'\.', '\0.'),
'(.', '(0.'),
'-.', '-0.'), '[.]', '0.', 1, 1)
else
replace(
replace(
replace(
replace(
replace( str, ' .', ' 0.'),
'/.', '/0.'),
'\.', '\0.'),
'(.', '(0.'),
'-.', '-0.')
end,
regexp_count(str, '[.]', 1, 'i')
from str_rec;我们可以使用regexp_replace实现此目的,还是有更好的方法来做到这一点。
谢谢
专家解答
你可以做这样的事情:
Match the start-of-line or any character that is not a number
起点是插入符号 “^”
要匹配列表中没有的任何字符,请使用带有插入符号的方括号作为第一个字符来开始 “反匹配”。然后是您要避免的字符列表。给予 [^ 0-9]
你想要这些中的任何一个,所以你需要选择操作员管道 “|” 或他们。也把这些放在括号里,这样你就可以保存这个字符替换:
Followed by a dot
你需要用反斜杠转义,因为它自己的句点匹配任何字符:
所以要匹配的完整模式是:
Replace this with zero followed by the matched character and dot
您可以用 \ 1引用保存的字符; 该数字是您要调用的子表达式的正则表达式中的位置。
这给出了:
当然,这确实假设您出于其他原因在字符串中没有句点
Match the start-of-line or any character that is not a number
起点是插入符号 “^”
要匹配列表中没有的任何字符,请使用带有插入符号的方括号作为第一个字符来开始 “反匹配”。然后是您要避免的字符列表。给予 [^ 0-9]
你想要这些中的任何一个,所以你需要选择操作员管道 “|” 或他们。也把这些放在括号里,这样你就可以保存这个字符替换:
(^|[^0-9])
Followed by a dot
你需要用反斜杠转义,因为它自己的句点匹配任何字符:
\.
所以要匹配的完整模式是:
(^|[^0-9])\.
Replace this with zero followed by the matched character and dot
您可以用 \ 1引用保存的字符; 该数字是您要调用的子表达式的正则表达式中的位置。
\10.
这给出了:
with str_rec as (
select
'.45ML-.91ML-25MCG/.5ML-.9ML(.3ML)-25.5ML or .45' str
from dual
)
select regexp_replace (
str, '(^|[^0-9])\.', '\10.'
)
from str_rec;
REGEXP_REPLACE(STR,'(^|[^0-9])\.','\10.')
0.45ML-0.91ML-25MCG/0.5ML-0.9ML(0.3ML)-25.5ML or 0.45 当然,这确实假设您出于其他原因在字符串中没有句点
文章转载自ASKTOM,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。




