使用正则表达式/sql substr 获取字符串的一部分

问题描述 投票:0回答:1

我想提取我的字符串的一部分:

输出 全弦 预期结果
xi xi-AN224432_-_this_is_some_text-x10.pdf AN224432 或 AN224432_
F1800X7T2P5P xi-F1800X7T2P5P-blahblah-v01_00-EN.pdf F1800X7T2P5P
1E303S 1E303S-blahblah-v01_20-EN.pdf 1E303S

我尝试过的正则表达式是:

select 
    regexp(Fullstring ,'^(xi-)?(\[A-Za-z0-9\]+)-.\*','$2') output  

这会正确返回第二行,但不会返回第一行。

我需要的输出是中间的字母数字,也可以在开始处。需要从结果中省略“xi”,因为它不是字母数字,我需要字母数字,如果它的“xi”在开始我想获得字符串的第二部分,我不明白为什么第二部分行显示正确,但第一个行显示“xi”。 第三种是最好的情况 - 因为开头没有 xi 。

regex substring denodo vql
1个回答
0
投票

我不知道您正在运行哪种风格的正则表达式,就像我们通常所做的那样 不逃避括号。但这可能是由于您的正则表达式的语法所致 引擎。由您决定是否需要它们(也适用于

\*
*
)。

但是缺少的是可选的下划线字符“

_
” 图案.

在 Perl 或 PHP 中,它将是:

^(xi-)?(([A-Za-z0-9]+)_?)-.*

此处演示:https://regex101.com/r/DCxixu/1

我添加了一个捕获组,以便您可以决定是否要使用 带下划线的完整组,或者如果您想删除它。你甚至可以 如果可以是其中几个,请将

_?
替换为
_*

© www.soinside.com 2019 - 2024. All rights reserved.