我有一個字串,它代表一個檔案。檔案擴展名的大小不同。'.' 之前的最后 2 個字符 提供重要資訊。有沒有辦法(可能使用正則運算式)來改變這兩個字符?
Mystring := blabla || two_characters_to_change || '.' || file_extension
Mystring_concrete_example := 'blabla93.pdf'
select regexp_replace('Mystring_concrete_example','??','39')
expected result:= 'blaba39.pdf'
有人知道我應該寫什么而不是'??',以便選擇'。'之前的2個字符 ?
uj5u.com熱心網友回復:
我們可以使用INSTR找到點,然后使用SUBSTRING來獲取我們想要保留的部分。
create table paths(path varchar(100));
insert into paths select 'blabla93.pdf' from dual;
with findings as
(select
path,
INSTR( path, '.') pos
from paths)
select
substr(path,1,pos-3) || '22' || substr(path,pos) as newPath
from findings
| 新路徑 | | :----------- | | blabla22.pdf |
db<>在這里擺弄
uj5u.com熱心網友回復:
如果您有不包含點的擴展名(如.tar.gz),那么您可以搜索末尾的點并使用正則運算式組提取兩個前面的字符:
with a as ( select 'blabla93.pdf' as file_ from dual ) select file_ , regexp_replace( file_ , '(.*)(.{2})(\.[^.] $)' , '\1' || 'something' || '\3' ) as file_new from a檔案_ | FILE_NEW :----------- | :----------------- blabla93.pdf | 廢話.pdf
db<>在這里擺弄
解釋:
(.*)- 第一個捕獲組,應包含任意數量*的任意字符.。(.{2})- 第二個捕獲組,應該包含兩個{2}任意.字符(\.[^.] $)- 第三個捕獲組,應以點開頭,\.后跟任何正數的任何字符,點除外[^.]并放在字串的最末尾$- Replacement
\N代表N第 'th 個捕獲組。
您也可以使用這個包含解釋的在線正則運算式測驗器:https ://regex101.com/ 。
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/466331.html
