2017-02-14 43 views
2

我試圖在每個字符串中的一組分隔符之間替換所有特殊字符的所有實例。我相信解決方案將包括正則表達式匹配的一些組合,以檢索每組分隔符和正則表達式之間的文本替換以用空格替換匹配內的每個違規字符。這是我到目前爲止有:如何替換字符串中每組分隔符之間的任何特殊字符的所有實例?

string input = "***XX*123456789~N3*123 E. Fake St. Apt# 456~N4*Beverly Hills*CA*902122405~REF*EI*902122405~HL*1*1*50*0~SBR*P*18*******MA~NM1*IL*1*Tom*Thompson*T***MI*123456789A~N3*456 W. False Ave.*Apt. #6B~N4*Beverly Hills*CA*90210~DMG*"; 
string matchPattern = "(~N3\\*)(.*?)(~N4\\*)"; 
string replacePattern = "[^0-9a-zA-Z ]?"; 

var matches = Regex.Matches(input, matchPattern); 
foreach (Match match in matches) 
{ 
    match.Value = "~N3*" + Regex.Replace(match.Value, replacePattern, " ") + "~N4*"; 
} 

MessageBox.Show(input); 

我期望的消息框,顯示以下內容:

"***XX*123456789~N3*123 E Fake St Apt 456~N4*Beverly Hills*CA*902122405~REF*EI*902122405~HL*1*1*50*0~SBR*P*18*******MA~NM1*IL*1*Tom*Thompson*T***MI*123456789A~N3*456 W False Ave *Apt 6B~N4*Beverly Hills*CA*90210~DMG*" 

顯然,這是行不通的,因爲我不能分配給內部的匹配值循環,但我希望你可以按照我的思維過程。任何不在分隔符之間的字符保持不變是很重要的。任何方向或建議都會有幫助。非常感謝!

回答

0

使用Regex.Replace與匹配評價,您可以撥打第二個Regex.Replace

string input = "***XX*123456789~N3*123 E. Fake St. Apt# 456~N4*Beverly Hills*CA*902122405~REF*EI*902122405~HL*1*1*50*0~SBR*P*18*******MA~NM1*IL*1*Tom*Thompson*T***MI*123456789A~N3*456 W. False Ave.*Apt. #6B~N4*Beverly Hills*CA*90210~DMG*"; 
string matchPattern = @"(~N3\*)(.*?)(~N4\*)"; 
string replacePattern = "[^0-9a-zA-Z ]"; 

string res = Regex.Replace(input, matchPattern, m => 
     string.Format("{0}{1}{2}", 
     m.Groups[1].Value, 
     Regex.Replace(m.Groups[2].Value, replacePattern, " "), // Here, you modify just inside the 1st regex matches 
     m.Groups[3].Value)); 
Console.Write(res); // Just to print the demo result 
// => ***XX*123456789~N3*123 E Fake St Apt 456~N4*Beverly Hills*CA*902122405~REF*EI*902122405~HL*1*1*50*0~SBR*P*18*******MA~NM1*IL*1*Tom*Thompson*T***MI*123456789A~N3*456 W False Ave Apt 6B~N4*Beverly Hills*CA*90210~DMG* 

C# demo

實際上,因爲~N3*~N4*是文字字符串,你可以使用一個捕獲組然後將這些分隔符作爲硬編碼添加到匹配評估程序中,但是由您決定最適合您的是什麼。

+0

這正是我所期待的!非常感謝! –

相關問題