在这个Linq查询中使用正则表达式
本文关键字:正则表达式 查询 Linq | 更新日期: 2023-09-27 18:18:30
我使用这个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)
我如何实现这个?有没有更好的办法?
在linq查询中使用regex模式:
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。
这个怎么样?
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();
<标题> 更新使用 LastIndexOfAny
var CableNumber = CList.Select(v =>
int.Parse(v.CableNumber.Substring(v.CableNumber
.LastIndexOfAny("0123456789".ToCharArray()) - 2, 3))).Max();
标题>您可以使用下一个正则表达式来获取每个字符串的最后3位数字:
('d{3})'D*$