需要Excel 2007 VBA RegEx帮助

时间:2016-05-18 01:07:31

标签: regex excel vba

我正在开发一个我的客户希望昨天完成的Excel 2007 VBA项目,我需要使用RegEx在一些非常具有挑战性的数据中查找字符串。这是我第一次接触RegEx,所以我坚持做一些我觉得很简单的事情(也许不是),而且我很无能为力。

我添加了对VBScript RegEx引擎(5.5)的引用,并且RegEx正在使用O.K.在Excel中 - 我只是不知道如何构造模式语句。我需要在工作表的一系列单元格中找到“trust”一词的出现位置。在我的一些数据中,这个词缩写为“Tr”。我构造了以下RegEx语句来找到单词“trust”以及所有以空格开头并包含“tr”的单词。

"trust| tr"

不幸的是,这匹配任何包含“tr”的单词,如“trail”,“tree”等。我想要匹配的是“tr” - 意味着它有一个前导空格,“tr”,而且没有其他内容。有人可以告诉我我需要做些什么来实现这一目标吗?

我还需要街道地址,城市,州和邮编的RegEx模式以及姓氏和名字。如果有人可以指示我使用这些表达的资源,我会很感激帮助。我很遗憾在没有花费足够时间教育自己的情况下向小组提出这个问题,这是一个时间敏感的项目,我需要你的专业知识。

提前致谢 -

PS - 这是我正在使用的数据样本。我有这种类型的数据存在于超过4,000行的5列中。

Jones Family **Trust**
3420 E Ave of the Ftns
3420 E Avenue of the Fountain
320 E ARROWHEAD **TRAILHEAD**
501 S 29TH ST
PO BOX 13422
71343 W Paradise Dr
152035 S 29TH ST
124 Owl Grove Pl
Johnson **Tr**
1900 E Arrowhead **Trl**
1900 E ARROWHEAD **TRL**

这是一个主要包含街道地址的列中的示例。其他列包含没有地址的客户端名称。因此,并非每个单元格都包含以数字开头的数据。

1 个答案:

答案 0 :(得分:1)

我会重写你的表达式,找到updatedbtrust,其中tr之前没有其他字母的前面或后面是字边界断言。 \b匹配一个恰当称为"字边界的位置"。

有三种不同的职位符合词边界:

  • 在字符串中的第一个字符之前,如果第一个字符是a 字符。
  • 字符串中的最后一个字符后,如果是最后一个字符 character是一个单词字符。
  • 字符串中的两个字符之间, 其中一个是单词字符而另一个不是单词字符。

有关字边界的更多信息,请参阅regular-expressions.info。我并不隶属于该网站。

\b

Regular expression visualization

查看完上述内容后,如果您仍然要求\b(?:trust|tr)\b 前面有空格,请使用此tr

实施例

现场演示

https://regex101.com/r/xM4fR9/1

注意:我假设您正在使用此

的不区分大小写的标记

解释

\b(?:trust|\str)\b

或者

NODE EXPLANATION ---------------------------------------------------------------------- \b the boundary between a word char (\w) and something that is not a word char ---------------------------------------------------------------------- (?: group, but do not capture: ---------------------------------------------------------------------- trust 'trust' ---------------------------------------------------------------------- | OR ---------------------------------------------------------------------- tr 'tr' ---------------------------------------------------------------------- ) end of grouping ---------------------------------------------------------------------- \b the boundary between a word char (\w) and something that is not a word char ---------------------------------------------------------------------- 表达式效率最高,但它是可读的。

功能相同但更有效的正则表达式将是:

\b(?:trust|tr)\b

Regular expression visualization

此处我们仍在使用\btr(?:ust)?\b 字边界,但我们已将\b部分的ust部分与trust一起设为可选构造。