我正在寻找正则表达式,以便从下面的字符串中获取正确的文件名。
输入
Report_18072014.pdf
预期产出
Report.pdf
到目前为止的查询给出了正确的输出。
REPLACE(FILENAME, '_' || TRIM(REGEXP_SUBSTR (FILENAME, '[^_.]+',1,2)))
我的问题是,如果有一个更好的正则表达式,我可以使用它来避免将_
连接到replace
函数中的子字符串。
答案 0 :(得分:2)
使用您的文件格式,您可以使用以下内容:
REGEXP_REPLACE(FILENAME, '^([[:alnum:]]+)_[^.]+(\.[^.]+)',
'\1\2',
1, 0, 'c')
<强>解释强>
^
锚点断言我们位于字符串的开头([[:alnum:]]+)
会抓住第1组的信件。[^.]+
匹配任何非.
(\.[^.]+)
捕获第2组的扩展名(点和任何不是点的字符)\1\2
取代第1组,第2组答案 1 :(得分:1)
尝试使用[未经测试]:
REGEXP_REPLACE(FILENAME, '_[[:digit:]]*\.', '.')
我非常喜欢使用正则表达式,但我希望Oracle使用PCRE格式而不是POSIX格式。
说明:
我会将替换更改为&#39; .PDF&#39;但我不想强制将您的文件名用于混合案例文件。