我想要完成的是找到字串中的最后一個數字并按該值拆分。
string packageSize = "4/8.75LB";
上面我有一個字串,我想將它拆分為一個字串陣列,并將它們放入資料庫中的兩個不同列中。第一部分是小數,最后一部分是字串或 varchar。
我在下面有這個代碼,它似乎正在作業。只是想知道是否有更好的解決方案,或者我錯過的已回答問題。
string value = Regex.Match(packageSize, @"(\d )(?!.*\d)", RegexOptions.RightToLeft).ToString();
int lastIndex = packageSize.LastIndexOf(value) value.Length;
string packageLoad = packageSize.Substring(0, lastIndex);
decimal loadDecimal = Convert.ToDecimal(packageLoad);
謝謝你的幫助!
uj5u.com熱心網友回復:
您可以在匹配最后一個數字之后的第一部分和第二部分使用 2 個捕獲組。
如果您希望每個組至少匹配一個字符,請將量詞更改為 而不是*
^(.*)[0-9](\D*)$
^字串的開始(.*)捕獲組 1,匹配任何字符[0-9]匹配單個數字 0-9(\D*)捕獲組 2,可選匹配非數字$字串結束
正則運算式演示
例如
string packageSize = "4/8.75LB";
Regex r = new Regex(@"^(.*?)[0-9](\D*)$");
foreach (Match m in r.Matches(packageSize))
{
Console.WriteLine(m.Groups[1].Value);
Console.WriteLine(m.Groups[2].Value);
}
輸出
4/8.7
LB
uj5u.com熱心網友回復:
“我想找到最后一個數字,并將字串分成兩部分”
在性能方面,我認為你不會比回圈做得更好:
for(int i = str.Length-1; i>=0; i--)
if(Char.IsDigit(str[i])){
return (str[..i], str[(i 1)..]);
}
它回傳一個元組 ("4/8.7", "LB")
——
您可以將其調整為以下之一:
var i = str.LastIndexOfAny("0123456789".ToCharArray());
var i = Array.FindLastIndex(str.ToCharArray(), Char.IsDigit);
return (str[..i], str[(i 1)..]);
令我百思不解的是,你的意見給予規范是沒有像你在問題中給出。您的代碼“作品”,但也沒有辦法,該代碼4/8.7會Convert.ToDecimal..
uj5u.com熱心網友回復:
您可以使用
var output = Regex.Split(packageSize, @"(\d)(?=\D*$)");
該(\d)(?=\D*$)正則運算式匹配和捕獲以數字(\d),其也與回傳Regex.Split(它輸出捕獲的子串)。在(?=\D*$)確保該(\d)字串中的最后一個數字相匹配。
請參閱C# 演示:
var packageSize = "4/8.75LB";
var result = Regex.Split(packageSize, @"(\d)(?=\D*$)");
foreach (var s in result)
Console.WriteLine(s);
// => 4/8.7
// 5
// LB
如果您需要確保確實發生了正則運算式拆分,請檢查輸出陣列的長度是否不等于1:
var packageSize = "4/8.75LB";
//var packageSize = "LB"; // => 'LB' did not match the regex.
var result = Regex.Split(packageSize, @"(\d)(?=\D*$)");
if (result.GetLength(0) != 1) { // We have found a match
foreach (var s in result)
Console.WriteLine(s);
}
else
{
Console.WriteLine($"'{packageSize}' did not match the regex.");
}
請參閱此 C# 演示。
此外,如果您只需要匹配 ASCII 數字,請使用Regex.Split(packageSize, @"(\d)(?=\D*$)", RegexOptions.ECMAScript).
uj5u.com熱心網友回復:
不能 100% 確定我是否正確理解了要求,但此正則運算式將捕獲輸入字串中的最后一個數字,無論是否為十進制,第一組和第二組中的以下字符:
(\d (?:\.\d )?)(\D*)$
因此,輸入字串"4/8.75LB"將被拆分為:
- 第 1 組:
"8.75" - 第 2 組:
"LB"
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/317349.html
