我已經堅持了一段時間,我的輸出如下所示:前 2 個字母代表走廊編號,因此第一個字母為 17,接下來的數字代表貨架編號(在走廊中的位置)。正如您在走廊 17 的貨架 1 中看到的那樣,我們有 A1 或 A,但這并不重要。我希望 171A1 的輸出為 171,而 15211 的輸出為 1521,因此我想洗掉末尾的字母以及后面可能跟隨的數字。
171A1
171A1
171A
171A0
15211
15211
15211
15210
15190
我嘗試使用 string.Remove(string.Length-2) 但這不起作用,例如我們有 171A,它應該變成 171。任何幫助將不勝感激。
uj5u.com熱心網友回復:
如果您不需要它是 REGEX,這應該可以作業
var rawString = "15211";
var maxLength = 4;
var trimmedResult = new string(
rawString.TakeWhile(char.IsNumber) // loop through characters using LINQ. since your string starts with numbers, you can just keep taking until you bump into a character
.Take(maxLength) // limit the length for cases like "15211" where you don't need the extra numbers in the end
.ToArray() // so we can use the new string() constructor
);
uj5u.com熱心網友回復:
對于問題中的部分,您可以使用帶有捕獲組的模式,并在替換中使用該組:
^([0-9]{2,}?)[A-Z]?[0-9]?$
^字串的開始([0-9]{2,}?)捕獲組 1,匹配 2 個數字 0-9 非貪婪[A-Z]?[0-9]?匹配可選字符 AZ 和可選數字 0-9$字串結束
請參閱正則運算式演示。
string pattern = @"^([0-9]{2,}?)[A-Z]?[0-9]?$";
string[] strings = { "171A1", "171A1", "171A", "171A0", "15211", "15211", "15211", "15210", "15190" };
foreach (String s in strings)
{
Console.WriteLine(Regex.Replace(s, pattern, "$1"));
}
輸出
171
171
171
171
1521
1521
1521
1521
1519
如果要在 2 位數字后用點分隔輸出,可以使用 2 個捕獲組并匹配第二組中的至少 1 個或多個數字:
string pattern = @"^([0-9]{2})([0-9] ?)[A-Z]?[0-9]?$";
string[] strings = { "171A1", "171A1", "171A", "171A0", "15211", "15211", "15211", "15210", "15190" };
foreach (String s in strings)
{
Console.WriteLine(Regex.Replace(s, pattern, "$1.$2"));
}
輸出
17.1
17.1
17.1
17.1
15.21
15.21
15.21
15.21
15.19
查看C# 演示
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/366150.html
