簡體   English   中英

如何從字符串中刪除特殊字符?

[英]how to remove special character from string?

我目前的情況是,我有一個像“XYZName”這樣的字符串,但它應該只需要前 3 個字符,並且在這 3 個字符中不應該有任何特殊字符。

示例:“XYZName”結果應為:XYZ

另一個要求是示例:“X.YZName”或“XY-ZName”結果應該是:XYZ

第一個示例已完成但無法實現第二個示例。 我的代碼是

 comName = (comName .Replace(".", string.Empty).Length >= 3
                    ? comName .Replace(" ", string.Empty).Substring(0, 3)
                    : comName .Replace(" ", string.Empty)).ToUpper();

這該怎么做 ?? 提前致謝

評論后更新也允許數字

comName = Regex.Replace(comName, @"[^a-zA-Z\d]", "").Substring(0, 3);

正則表達式使用否定集,因此除azAZ或數字 ( \\d ) 之外的任何字符都將被刪除。

刪除字符后, Substring取前 3 個。


如果您使用的是 C#8+,您可以用范圍替換Substring

comName = Regex.Replace(comName, @"[^a-zA-Z\d]", "")[..3];

您可以確保首先將字符 AZ 與 AZ 以外的可選字符或中間的空白字符匹配 3 次:

^[A-Z][^\sA-Z]*[A-Z][^\sA-Z]*[A-Z]

查看匹配的正則表達式演示

然后從這些匹配項中,刪除 AZ 以外的所有字符:

var regex = new Regex(@"^[A-Z][^\sA-Z]*[A-Z][^\sA-Z]*[A-Z]");
string[] strings = {"XYZName", "X.YZName", "XY-ZName"};

foreach (String s in strings)
{
    var m = regex.Match(s);
    if (m.Success) {
        Console.WriteLine(Regex.Replace(m.Value, @"[^A-Z]+", ""));
    }
}

輸出

XYZ
XYZ
XYZ

請參閱C# 演示


或者您可以使用 3 個捕獲組並直接打印組的值。

^([A-Z])[^\sA-Z]*([A-Z])[^\sA-Z]*([A-Z])

C# 演示| 正則表達式演示

暫無
暫無

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

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