2016-05-18 104 views
-1

我正在开发一个Excel 2007 VBA项目,我的客户希望昨天完成,我需要使用RegEx在一些相当具有挑战性的数据中查找字符串。这是我第一次接触RegEx,所以我被困在做一些我认为很简单(也许不是)的东西,而且我很无能。Excel 2007 VBA RegEx帮助需要

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

"trust| tr" 

不幸的是,它匹配任何包含“tr”的单词,如“trail”,“tree”等。我想匹配的是“tr” - 这意味着它有一个领先的空间,“tr”,并且没有其他任何词。有人可以告诉我我需要做些什么才能做到这一点?

我还需要RegEx模式的街道地址,城市,州和邮政编码以及姓氏和名字。如果有资源可以让我指向这些表达式,我会很感激这个帮助。我很抱歉地问这个小组这个问题,而没有花费适当的时间来教育自己,因为这是一个时间敏感的项目,我需要你的专业知识。

在此先感谢 -

PS - 这里是我正在使用的数据示例。我有这种类型的数据在5列4000行以上。

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** 

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

+0

您能举一个例子,说明您的一些示例输入可能是什么样的,以及您期望从中捕获什么?每行有一个单词吗?了解这些细节可以影响表达式的构建方式。 –

+0

我刚刚尝试过这种模式''trust | tr [^ a-z] | tr $“'这似乎是个窍门。任何改进建议? –

+0

在你的示例文本中'Johnson ** Tr **'不是一个想要的匹配,因为'tr'被括起来了'**'? –

回答

1

我会重写你的表达式,发现trusttr他们没有之前或之后通过使用\b其他字母是一个字边界断言。 \b匹配在适当称为“文字边界”的位置。

有迹象表明,有资格作为单词边界的三个不同位置:

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

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

\b(?:trust|tr)\b 

Regular expression visualization

观看上面的,如果你仍然需要在前面有一个空格的tr设置好后,然后用这个\b(?:trust|\str)\b

例子

现场演示

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

注:我假设你正在使用的不区分大小写标志这个

说明

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表达是不是最有效的,但它是可读。

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

\btr(?:ust)?\b 

Regular expression visualization

这里我们仍然使用\b字边界,但我们刚刚作出的对ust部分字trust可选(?: ...)?构造。

+0

非常感谢,@Ro Yo Mi,非常完整的回答。这正是我需要的。 –