簡體   English   中英

使用REGEX查找除第一次出現的字符外的所有字符

[英]Find all but the first occurrence of a character with REGEX

我正在構建.Net應用程序,我需要從字符串中刪除任何非小數字符(不包括第一個'。')。 基本上我正在清理用戶輸入以強制實數結果。

到目前為止,我一直在使用在線RegEx工具試圖在一次通過中實現這一點,但我沒有走得太遠。

我希望這樣做:

asd123.asd123.123.123 = 123.123123123

不幸的是,我只是設法進入了舞台

asd123.asd123.123.123 = 123.123.123.123

通過使用此代碼。

System.Text.RegularExpressions.Regex.Replace(str, "[^\.|\d]*", "")

但是我試圖刪除除第一個小數點以外的所有內容。

這可以一次完成嗎?
有沒有更好的方式?

這可以在單個正則表達式中完成,至少在.NET中支持lookbehind斷言中的無限重復:

resultString = Regex.Replace(subjectString, @"(?<!^[^.]*)\.|[^\d.]", "");

說明:

(?<!^[^.]*) # Either match (as long as there is at least one dot before it)
\.          # a dot
|           # or
[^\d.]      # any characters except digits or dots.

(?<!^[^.]*)表示:斷言不可能匹配從輸入字符串開頭開始的字符串,並且只包含點以外的字符。 對於第一個點之后的所有點,這種情況都適用。

我認為如果沒有正則表達式,它會更好。

string str = "asd123.asd123.123.123";
StringBuilder sb = new StringBuilder();
bool dotFound = false;
foreach (var character in str)
{
    if (Char.IsDigit(character))
        sb.Append(character);
    else if (character == '.')
        if (!dotFound)
        {
            dotFound = true;
            sb.Append(character);
        }
}
Console.WriteLine(sb.ToString());

首先,您當前使用的正則表達式將留下任何| 字符不受影響。 你只需要[^.\\d]* . []沒有特殊意義

在替換之后,您可以嘗試這樣的事情:

Replace(str, "([\d]+\.[\d]+)[^\d].*", "\1");

但是如果有的話,你只需要這個. 根本就是這個數字。

希望這可以幫助。

暫無
暫無

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

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