2011-04-12 46 views
1

我需要替換文本文件中的數字字符串列表。然而,如果字符串是另一個數字字符串的一部分,它不應該被更換:需要更換 字符串:111111 替換字符串:蒙面Regex.Replace - 跳過屬於較長字符串的字符串

Text file: 
111111 
111111.text text 
text text111111 text text 
a111111 
2111111 
111111a 
1111112 
a111111a 

Expected result: 
MASKED 
MASKED.text text 
text textMASKED text text 
aMASKED 
2111111 -> Character 2 prevents masking 
MASKEDa 
1111112 -> Character 2 prevents masking 
aMASKEDa 

這是我的代碼:

inputText = Regex.Replace(inputText, "(?<![0-9])" + stringToMask + "(?<![0-9])", "####MASKED####"); 

此代碼只是跳過一切,並沒有執行任何掩蔽。

+2

應該不是第二個是 - 定向排除(<[0-9]?!)([0-9]?!)? – sh54 2011-04-12 10:10:51

+0

什麼sh54說。他應該得分:) – sehe 2011-04-12 10:16:45

+0

@亨克,不,你不能。 '\ D'會是'[^ 0-9]'。 '!'屬於斷言'(?<!...)'的後面。 – stema 2011-04-12 10:24:15

回答

1

您可以使用MatchEvaluator http://www.dotnetperls.com/regex-replace執行條件替換。要決定瓶坯是否替換,您可以添加第一個和最後一個字母以匹配花樣,按此花樣分割字符串並分析第一個和最後一個符號。

+0

也添加了Regexp.Escape給你的圖案,它可以包含 – varela 2011-04-12 10:22:04

+0

裏面的特殊符號我正在研究這個,因爲我有興趣爲Replace添加更多的驗證。我想要一個預定義的字符串列表,他們的存在將抑制替換操作。例如,在字符串「amount = 111111」中,有'amount ='應該停止匹配。我看了你發佈的例子和其他幾個人,並不明白它是如何完成的。代表只需要匹配,所以它不能檢查之前會發生什麼。 – Yoav 2011-04-12 12:16:43

+0

使用Regex.Replace(inputText,「。?」+ stringToMask +「。?」,「#### MASKED ####」);你會在乞討中得到你需要的一個額外的符號,並在最後。比你可以通過11111分割字符串,第一項將是第一個符號,第二個 - 最後一個。當你完成解析時,你應該把第一個和最後一個符號添加到替換後的字符串中。 – varela 2011-04-12 13:23:38