2016-05-18 71 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,非常完整的回答。這正是我需要的。 –