在这个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查询中使用正则表达式

在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*$