簡體   English   中英

正則表達式。替換不適用於分隔符

[英]Regex.Replace is not working with separators

我只想用String.Empty替換,如果在給定的字符串中找到任何分隔符。

class Program
{
    private const string Separators = "-(). ";
    static void Main(string[] args)
    {
        var number = Format("88 88-88)8.8(88");
    }

    public static string Format(string number)
    {
        return Regex.Replace(number, Separators, string.Empty);
    }
}

預期為: 8888888888但當時是88 88-88)8.8(88 。我在這里錯過了什么嗎?

編輯 :如果使用

Separators.ToCharArray().ToList().ForEach(c => { number = number.Replace(c.ToString(), string.Empty);});

有用。 但是如果我用Regex.Replace實現的話可能會更好。

使用正則表達式時,某些字符具有某些含義。 點表示“任何字符”,破折號表示范圍為0-9。 我已將這些字符轉義,然后將它們放在字符集[]中,這意味着“該集中的任何人”。 我還重命名了Separators變量,以更好地反映它的含義。

嘗試以下方法:

class Program
{
    private const string SeparatorsRegex = @"[\-()\. ]";
    static void Main(string[] args)
    {
        var number = Format("88 88-88)8.8(88");
    }

    public static string Format(string number)
    {
        return Regex.Replace(number, SeparatorsRegex, string.Empty);
    }
}

在Expresso中對其進行了測試,並且效果達到了預期。 對於正則表達式開發人員來說,這是一個很棒的工具:

(忽略可怕的網站設計,這是一個很好的實用誠實:P)

還有一點需要注意的是,如果您只想剝離所有不包含數字的內容,則可以使用以下代碼:

class Program
{
    private const string StripNonNumbersRegex = @"[^\d]";
    static void Main(string[] args)
    {
        var number = Format("88 88-88)8.8(88");
    }

    public static string Format(string number)
    {
        return Regex.Replace(number, StripNonNumbersRegex, string.Empty);
    }
}

Regex.Replace()適用於模式,而不適用於分隔符。 您將其與String.Replace()混淆了。

String.Replace(source,“-”,string.empty)可以使用,但是您需要每個字符運行一次。 Regex.Replace(source,pattern,string.empty)會更好,但是您需要使用RegEx pattern ,而不是簡單列出字符。

暫無
暫無

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

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