2009-12-29 41 views
3

這裏是我一起工作的典型字符串:正則表達式替換未去掉空格

·         Identify & document site-related constraints and assumptions. 

我想擦洗該字符串「確定」之前擺脫一切......

我寫了一個函數把字符串和擦洗,那就是:

Function dataScrub(dataIn As String) 
Dim dataIn_orig As String 
dataIn_orig = dataIn 

'BEGIN : create and set regular expression 
Dim regEx 
Set regEx = CreateObject("vbscript.regexp") 
With regEx 
     .IgnoreCase = True 
     .MultiLine = False 
     .Pattern = "^[\s]*[·]+[\s]*" 
     .Global = True 
End With 

dataScrub = regEx.Replace(dataIn_orig, "") 
End Function 

對於一個未知的原因,取而代之的是更換·(不是句號,更像一顆子彈),但不能擺脫的foll的空間流,所以我的最終結果是:

 Identify & document site-related constraints and assumptions. 

當我使用在線測試儀(http://www.regular-expressions.info/javascriptexample.html)測試我正則表達式,它按預期工作。

我在做什麼錯?

+0

我不認爲你的問題是與正則表達式,但與格式的文本。我正在玩一些東西,看看我能否實現它。我注意到這一點,因爲excel trim函數在正則表達式運行後不會刪除文本前面的空格 – 2009-12-29 19:08:52

回答

2

[\s]匹配\s。嘗試使用沒有方括號的普通舊式\s


好,因爲這仍然無法正常工作,最後\s*可能是一個不情願的比賽,而不是一個貪婪的一個。您應該可以通過在表達式末尾添加\b來解決該問題。 \b指示單詞邊界(在單詞之前或之後)。試試這個:

^\s*[·]+\s*\b 
+0

我試圖刪除括號以不存在,謝謝你的建議,儘管 – Seth 2009-12-29 18:51:01

+0

添加了\ b也沒有工作。 的注意,但它確實工作(作爲我的第一次嘗試)http://www.regular-expressions.info/javascriptexample.html,但有趣的是,沒有在http://rubular.com/工作(而我的第一一個),但不像其實任何實際問題:) – Seth 2009-12-29 18:59:42

+0

你確定這些空間是由'\ s'匹配嗎?該空間實際上可能不是典型的選項卡或空間。它可能是一些奇特的格式,而正則表達式無法匹配。我建議將字段從Excel複製到文本編輯器中,保存,然後在十六進制編輯器中檢查結果,以查看實際上導致該空間出現在點後面的字符。 – Welbog 2009-12-29 19:05:20

1

看起來答案已被接受,但在你的函數中運行這行代碼也會照顧到你的問題。

Cells.Replace What:=Chr(160), Replacement:="", LookAt:=xlPart 
+0

謝謝,我會考慮在未來嘗試這種方法 – Seth 2009-12-29 19:38:49