正则表达式 - 匹配括号内的可选文本组,包括括号本身 - 分组时

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

我无法修改我的代码以使其能够检测并包含括号内的可选文本块

我正在尝试提取文本,并成功使用了我的第一个版本的代码,其工作原理如下。

--代码开始--

([A-Z]{2,}-\d+)\(?\s.?([a-zA-Z]+\s?[a-zA-Z]+)\s\d*-\d*\s([a-zA-Z]+\s?[a-zA-Z]+\s?[a-zA-Z]+)

--代码结束--

--数据开始--

Design No. TAHN-7075 Natural Gray 0997-101 White 0911-101

--数据结束--

--输出开始--

TAHN-7075
Natural Gray
White

--输出结束--

但是当数据如下时括号失败,因为括号中的数据已经出现在这里

--数据开始--

Design No. TAHN-7082(CS-02) Natural Gray 0997-101 Natural Gray 0997-101

--数据结束--

我尝试了下面的代码,它与上面的数据匹配,但创建了一个额外的组,并且在所有其他文本上也失败了

--代码开始--

([A-Z]{2,}-\d+\(([^\)]+)\))\(?\s.?([a-zA-Z]+\s?[a-zA-Z]+)\s\d*-\d*\s([a-zA-Z]+\s?[a-zA-Z]+\s?[a-zA-Z]+)

--代码结束--

--输出开始--

TAHN-7082(CS-02)
CS-02
Natural Gray
Natural Gray

--输出结束--

我需要帮助来使我的正则表达式代码匹配两种类型的数据集,即带或不带括号块。

我目前正在正则表达式测试网站上尝试它,但完成后会将其移植到 VBA。

如果我需要提供任何进一步的信息,请告诉我。

致以诚挚的问候

excel regex vba parentheses
1个回答
0
投票

您可以省略

.?
,因为这会导致丢失第一个字符并省略单个可选括号
\)?

然后将整个部分设为可选,如下所示:

([A-Z]{2,}-\d+(?:\([^)]+\))?)\s([a-zA-Z]+\s?[a-zA-Z]+)\s\d*-\d*\s([a-zA-Z]+\s?[a-zA-Z]+\s?[a-zA-Z]+)

查看 正则表达式演示

注意,在这部分中

\d*-\d*
数字是可选的,\s?`匹配可选的空白字符。

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