我正在使用这个Linq来查找列表中的最高int,以便我可以将其递增并将其添加到下一个字符串的末尾:
var CableNumber = CList.Select(v => int.Parse(v.CableNumber.Substring(n))).Max();
但是,因为字符串不是固定长度,我想在那里插入一个Regex.Match
,可能是这样的:
n = Regex.Match(CableNumber, @"\d{3}", RegexOptions.RightToLeft);
指定;输入字符串遵循的唯一格式是它总是在末尾有一个3位数字,后面可能跟一个字母。一些例子:
CP1-P-CP2-001 (001)
MOT1PSP2023A (023)
TKSP3-C-FLT2-234-A (234)
我怎么能实现这个?还有更好的方法吗?
答案 0 :(得分:1)
以下使用linq查询中的正则表达式模式:
string[] strings = { "CP1-P-CP2-001 (001)","MOT1PSP2023A (023)", "TKSP3-C-FLT2-234-A (234)",
"InvalidString" };
int? maxValue = strings.Max(x =>
{
var match = Regex.Match(x, @"\d{3}(?=\D*$)");
return match.Success ? (int?) int.Parse(match.Value) : null;
});
int?
是这样我们可以绕过从无效匹配回来的任何string.Empty
,只解析有效匹配。如果没有匹配,则返回null。
答案 1 :(得分:0)
这个怎么样?
var CableNumber = CList.Select(v =>
int.Parse(v.CableNumber.Substring(v.CableNumber.Length - 3))).Max();
或者是安全的(防止字符串少于3个字符)。
var CableNumber = CList.Select(v =>
int.Parse(("000" + v.CableNumber).Substring(("000" + v.CableNumber).Length - 3))).Max();
var CableNumber = CList.Select(v =>
int.Parse(v.CableNumber.Substring(v.CableNumber
.LastIndexOfAny("0123456789".ToCharArray()) - 2, 3))).Max();
答案 2 :(得分:0)
您可以使用下一个正则表达式来获取每个字符串中的最后3位数字:
(\d{3})\D*$