Regex 获取匹配的子字符串的正则表达式

Regex 获取匹配的子字符串的正则表达式,regex,Regex,很抱歉用了这么奇怪的措词,我不知道如何简洁地描述我需要做的事情 我需要从系统数据库返回的字符串中提取零件号的第一部分。零件号通常采用以下格式: VENDOR FIRST123-SECOND123 供应商是可选的,分隔连字符也是可选的。我需要以FIRST123结尾,如果没有连字符,则需要最后一个完整的“单词” 到目前为止,我可以通过以下方法获得FIRST123-SECOND123: [^ ]*$ 我还没有弄清楚如何分割结果匹配以获得任何连字符之前的所有内容。想法?您可以使用: 这将捕获第一个非

很抱歉用了这么奇怪的措词,我不知道如何简洁地描述我需要做的事情

我需要从系统数据库返回的字符串中提取零件号的第一部分。零件号通常采用以下格式:

VENDOR FIRST123-SECOND123
供应商
是可选的,分隔连字符也是可选的。我需要以
FIRST123
结尾,如果没有连字符,则需要最后一个完整的“单词”

到目前为止,我可以通过以下方法获得
FIRST123-SECOND123

[^ ]*$
我还没有弄清楚如何分割结果匹配以获得任何连字符之前的所有内容。想法?

您可以使用:

这将捕获第一个非连字符、非空白字符序列,该序列仅由非空白字符与结尾分隔

然而,我想说字符串方法会更有帮助。获取
lastIndexOf(“”
,然后从中获取
firstIndexOf(“-”
),然后获取它们之间的子字符串。

您可以使用:

这将捕获第一个非连字符、非空白字符序列,该序列仅由非空白字符与结尾分隔


然而,我想说字符串方法会更有帮助。获取
lastIndexOf(“”
,然后从中获取
firstIndexOf(“”
),然后获取它们之间的子字符串。

以下是我的正则表达式,以获取所需的内容:

[^ ]*\w*(?=-)

你开局不错
\w*
表示“获取所有单词字符”(字母和数字),而
(?=-)
表示“最多一个字符后跟一个破折号”

以下是我的正则表达式以获取所需内容:

[^ ]*\w*(?=-)

你开局不错
\w*
说“获取所有单词字符”(字母和数字)和
(?=-)
说“最多一个后面有破折号”

不妨把我的建议放进去。断言第二个零件号后没有更多文本


/[a-zA-z]\+\d\+[^$]

不妨把我的建议放在那里。断言第二个零件号后没有更多文本



/[a-zA-z]\+\d\+[^$]

我打赌可能会有专门用于正则表达式的堆栈交换。提示:重新构造数据库;-)这是一个自由格式的文本输入字段,用于输入零件说明。祝你好运!:)我打赌可能会有专门用于正则表达式的堆栈交换。提示:重新构造数据库;-)这是一个自由格式的文本输入字段,用于输入零件说明。祝你好运!:)
[^]*
有什么用?我担心,如果找不到破折号,加上
\w*
,这甚至可能导致灾难性的回溯。[^]*是跳过任何前导空格分隔的单词。这对我也不起作用,不是因为正则表达式不起作用,而是因为我的源文本是非结构化的。谢谢你的建议!
[^]*
有什么用?我担心,如果找不到破折号,加上
\w*
,这甚至可能导致灾难性的回溯。[^]*是跳过任何前导空格分隔的单词。这对我也不起作用,不是因为正则表达式不起作用,而是因为我的源文本是非结构化的。谢谢你的建议!这不管用。。。然而,在查看了一些可能的条目之后(参见上面我的“自由格式文本”注释),我认为使用字符串函数会更好。我会给你这个建议的答案:)嗯,WorkForme(带你的输入示例)。您使用什么语言,设置了哪些匹配选项?我使用Expresso以默认参数构建/测试正则表达式。如果我保留了前导和尾随的斜杠字符,就没有匹配项。如果我删除它们,我会将FIRST123和SECOND123都作为匹配项。是的,斜杠只是常用的正则表达式文字分隔符,这取决于您选择的语言,您需要其他字符(或将正则表达式写入字符串文字)。要仅获得一个结果,请使用“matchFirst”方法或某种方法,和/或删除“global”标志。谢谢,这很有意义。几年前我经常使用正则表达式,但现在我不再经常使用它们来流利地表达…这不起作用。。。然而,在查看了一些可能的条目之后(参见上面我的“自由格式文本”注释),我认为使用字符串函数会更好。我会给你这个建议的答案:)嗯,WorkForme(带你的输入示例)。您使用什么语言,设置了哪些匹配选项?我使用Expresso以默认参数构建/测试正则表达式。如果我保留了前导和尾随的斜杠字符,就没有匹配项。如果我删除它们,我会将FIRST123和SECOND123都作为匹配项。是的,斜杠只是常用的正则表达式文字分隔符,这取决于您选择的语言,您需要其他字符(或将正则表达式写入字符串文字)。要仅获得一个结果,请使用“matchFirst”方法或某种方法,和/或删除“global”标志。谢谢,这很有意义。几年前我经常使用正则表达式,但现在我不再经常使用它们来流利地表达了。。。