我想提取我的字符串的一部分:
输出 | 全弦 | 预期结果 |
---|---|---|
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 。
我不知道您正在运行哪种风格的正则表达式,就像我们通常所做的那样 不逃避括号。但这可能是由于您的正则表达式的语法所致 引擎。由您决定是否需要它们(也适用于
\*
*
)。
但是缺少的是可选的下划线字符“
_
”
图案.
在 Perl 或 PHP 中,它将是:
^(xi-)?(([A-Za-z0-9]+)_?)-.*
此处演示:https://regex101.com/r/DCxixu/1
我添加了一个捕获组,以便您可以决定是否要使用 带下划线的完整组,或者如果您想删除它。你甚至可以 如果可以是其中几个,请将
_?
替换为 _*
。