簡體   English   中英

如何在字符串中出現一組定界符之間替換任何特殊字符的所有實例?

[英]How do I replace all instances of any special characters between each occurrence of a set of delimiters in a string?

我正在嘗試在字符串中的一組定界符的每次出現之間替換任何特殊字符的所有實例。 我相信該解決方案將包括以下兩種組合:正則表達式匹配以檢索每組定界符之間的文本,以及正則表達式替換以將匹配中的每個有問題的字符替換為一個空格。 這是我到目前為止的內容:

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*"

顯然,這是行不通的,因為我無法在循環內分配匹配的值,但我希望您能遵循我的思考過程。 重要的是,不在定界符之間的任何字符都應保持不變。 任何方向或建議都會有所幫助。 非常感謝!

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#演示

實際上,由於~N3*~N4*是文字字符串,因此您可以在模式中使用單個捕獲組,然后在匹配評估器中將這些定界符添加為硬編碼,但是由您決定最適合您的是。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM