簡體   English   中英

從字符串中提取可變長度的子字符串

[英]Extracting a substring of variable length from a string

我需要使用c#和.NET從字符串中提取可變長度的十進制數。 輸入字符串類似於$PTNTHPR,352.5,N,2.3,N,4.6,N,16* 我需要第一次出現十進制數,即352.5部分。 數值范圍從0.0360.0 ,我需要從該字符串中獲取該數字。

我進行了很多搜索,並找到了固定長度子字符串的解決方案,但在這里我要提取可變長度。 我尚未嘗試任何代碼。

如果始終采用這種格式,則可以使用String.Splitdecimal.Parse

var data = @"$PTNTHPR,352.5,N,2.3,N,4.6,N,16*";
var d = decimal.Parse(data.Split(new[]{','})[1]);

Console.WriteLine(d);

這只是指導您的示例代碼。 您應該為此添加其他異常處理邏輯,還要考慮使用小數。TryParse

如果要查找十進制值的第一個出現,請分割字符串並逐個解析它們。

var data = @"$PTNTHPR,352.5,N,2.3,N,4.6,N,16*";
var splited = data.Split(new[]{','});
decimal? value = null;
foreach (var part in splited)
{
    decimal parsed;
    if (decimal.TryParse(part, out parsed))
    {
        value = parsed;
        break;
    }
}
Console.WriteLine(value);

第一次出現在任何令牌中? 使用String.Split將它們分開,然后使用LINQ查找第一個。 您可以使用decimal.TryParse來檢查其是否可解析:

decimal? firstParsableToken = "$PTNTHPR,352.5,N,2.3,N,4.6,N,16*".Split(',')
    .Select(s => s.TryGetDecimal(NumberFormatInfo.InvariantInfo))
    .FirstOrDefault(d => d.HasValue);

用這個簡單的擴展方法將其解析為decimal?

public static decimal? TryGetDecimal(this string item, IFormatProvider formatProvider = null, NumberStyles nStyles = NumberStyles.Any)
{
    if (formatProvider == null) formatProvider = NumberFormatInfo.CurrentInfo;
    decimal d = 0m;
    bool success = decimal.TryParse(item, nStyles, formatProvider, out d);
    if (success)
        return d;
    else
        return null;
}

如果字符串始終用逗號分隔,是否可以不使用string.Split()獲取每個部分,然后使用double.TryParse()測試該部分是否為數字?

public static class Helper
{
    public static string MyExtract(this string s)
    {
        return s.Split(',').First(str => Regex.IsMatch(str, @"[0-9.,]"));
    }
}

像這樣使用它: string str = "$PTNTHPR,352.5,N,2.3,N,4.6,N,16*".MyExtract(); 然后根據需要將其轉換為雙精度/十進制。

暫無
暫無

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

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