我无法修改我的代码以使其能够检测并包含括号内的可选文本块
我正在尝试提取文本,并成功使用了我的第一个版本的代码,其工作原理如下。
--代码开始--
([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。
如果我需要提供任何进一步的信息,请告诉我。
致以诚挚的问候
您可以省略
.?
,因为这会导致丢失第一个字符并省略单个可选括号 \)?
然后将整个部分设为可选,如下所示:
([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?`匹配可选的空白字符。