【发布时间】:2021-09-20 04:31:19
【问题描述】:
你好,我是正则表达式的新手,我很难弄清楚如何使用 VBA 中的正则表达式来获取评估字符串中匹配的组。
它可以在字符串中出现 4 种或更多不同的单词可能性,后跟 1 位或更多位:
- W 点 =
- WR/KE-Point=
- WNr 点=
- SST_P-Nr =
其中一个词在字符串中只出现一次
求值字符串: "3: CALL U(Base,EZSP,Nr1,Pr-nr=20,Offset=1,Path=2,WNr-Point=20,Pr=65,ON)"
使用的正则表达式: (?:(W-Point=)(\d*)|(SST_P-Nr=)(\d*)|(WR/KE-Point=)(\d*)|(WNr-Point=)(\d *))
到目前为止一切正常:Example
问题:确定匹配的单词/数字对并获取其组号。现在我循环遍历结果并丢弃空的子匹配。有没有更好或更有效的方法?
提前致谢。
【问题讨论】:
-
这对我来说似乎是一个 XY 问题。您要实现的最终目标是什么?你试过吗:
(W-Point=|SST_P-Nr=|WR\/KE-Point=|WNr-Point=)(\d*)? -
您所做的一切都会奏效。或者,使用文本函数,您可以提取匹配到
=符号的部分;然后查找位置。 -
如果您的唯一目标是“识别匹配的单词/数字对并获取其组号”,并且如果数据太大并且生成的匹配数太多而无法循环,那么您可以一次简单地为每个组执行正则表达式,而不必使用循环再次识别该组。我的意思是说,如果您实际上不想要机器,而是想要每个组的匹配数,那么最好不要为每个组分别循环和执行正则表达式。
-
感谢@cybernetic.nomad,这很有帮助,我只是想知道字符串中的哪个单词,以便我可以根据该单词对我的代码做一些其他的事情。
标签: excel regex vba conditional-statements capturing-group