2013-04-16 118 views
0

我有一個原始單詞列表,並替換爲我想用某些句子中的原始單詞替換單詞替換單詞的單詞。使用正則表達式的整個單詞替換

例如我的名單:

theabove  the above 
myaddress  my address 

所以一句 「這是theabove。」將成爲「這是上述」。

我使用正則表達式在VB中是這樣的:

Dim strPattern As String 
Dim regex As New RegExp 

regex.Global = True 

If Not IsEmpty(myReplacementList) Then 
    For intRow = 0 To UBound(myReplacementList, 2) 
     strReplaceWith = IIf(IsNull(myReplacementList(COL_REPLACEMENTWORD, intRow)), " ", varReplacements(COL_REPLACEMENTWORD, intRow)) 
     strPattern = "\b" & myReplacementList(COL_ORIGINALWORD, intRow) & "\b" 
     regex.Pattern = strPattern 

     TextToCleanUp = regex.Replace(TextToReplace, strReplaceWith) 
    Next 
End If 

我圈在對文本TextToReplace我要處理我的列表myReplacementList所有條目,並替代必須是完整的單詞,所以我用了「\ b」令牌圍繞原始單詞。

它運作良好,但我有一個問題,當原話包含例如一些特殊字符

overla) overlay 

我嘗試在模式逃脫),但它不工作:

\boverla\)\\b 

我不能用這個詞替換句子「這個詞是疊加的」。「 「這個詞與這個詞重疊。」

不確定缺少什麼?正則表達式是上述場景的方式嗎?

回答

1

我想使用string.replace()。 這樣,你不必逃避特殊字符。只有這些:「」! 這裏的例子:http://www.dotnetperls.com/replace-vbnet

正則表達式很好,如果你尋找模式。或者重新命名你的mp3收藏;-)以及更多。但在你的情況下,我會使用string.replace()。

+0

感謝@gilu,我的問題與string.replace是,它不能輕鬆處理整個單詞替換。 例如,如果我將「carr」替換爲「car」,我的句子「這是我的carr和我攜帶的現金」。會變成「這是我的車和我付出的現金。」 –

+0

我明白了,你是對的! 這很棘手! 您可以做的是,從您的字符串(string.replace())中刪除所有+「*ç%&/(),然後使用您的正則表達式來查找這些字詞。 http://msdn.microsoft.com/en-us/library/system.text.regularexpressions.regex.escape.aspx 這可能也有幫助。 – gilu