You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C#中如何筛选列表中以_P后接若干数字结尾的字符串

筛选以_P+纯数字结尾的字符串

针对你的需求,这里有两种实用的实现方案,分别适合不同的场景:

方案一:正则表达式(推荐,简洁高效)

正则表达式是处理这类字符串匹配需求的最优解,我们可以用模式@"_P\d+$"来精准匹配符合要求的字符串:

  • _P:匹配固定的后缀开头
  • \d+:匹配一个或多个数字(\d表示数字,+表示至少出现一次)
  • $:锚定到字符串结尾,确保_P后面的内容全是数字,不会出现像POWER_OPTION_P45JW这种后续带非数字的情况

结合LINQ的Where方法,就能快速筛选出目标列表:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text.RegularExpressions;

class Example
{
    static void Main()
    {
        List<string> list1 = new List<string>() 
        { 
            "REGISTER_OPTION_P2", 
            "REGISTER_OPTION_P27", 
            "REGISTER_OPTION_P254",
            "REGISTER_OPTION_NOFW", 
            "POWER_OPTION_P45JW" 
        };

        var filteredList = list1.Where(s => Regex.IsMatch(s, @"_P\d+$")).ToList();

        // 输出结果
        foreach (var item in filteredList)
        {
            Console.WriteLine(item);
        }
    }
}

运行这段代码,就能得到你预期的结果:REGISTER_OPTION_P2、REGISTER_OPTION_P27、REGISTER_OPTION_P254


方案二:手动字符遍历(基于你熟悉的char.IsDigit())

如果你不想用正则,也可以手动遍历字符串的结尾部分,利用char.IsDigit()逐个验证数字:

核心思路:

  1. 找到字符串中最后一个_P的位置
  2. 检查_P后面是否有字符,且所有后续字符都是数字

实现代码如下:

using System;
using System.Collections.Generic;
using System.Linq;

class Example
{
    static void Main()
    {
        List<string> list1 = new List<string>() 
        { 
            "REGISTER_OPTION_P2", 
            "REGISTER_OPTION_P27", 
            "REGISTER_OPTION_P254",
            "REGISTER_OPTION_NOFW", 
            "POWER_OPTION_P45JW" 
        };

        var filteredList = list1.Where(s => EndsWithPAndDigits(s)).ToList();

        foreach (var item in filteredList)
        {
            Console.WriteLine(item);
        }
    }

    static bool EndsWithPAndDigits(string input)
    {
        // 定位最后一个"_P"的索引
        int lastPIndex = input.LastIndexOf("_P");
        
        // 没有找到"_P",或者"_P"后面没有字符,直接排除
        if (lastPIndex == -1 || lastPIndex >= input.Length - 2)
        {
            return false;
        }

        // 遍历"_P"之后的所有字符,检查是否都是数字
        for (int i = lastPIndex + 2; i < input.Length; i++)
        {
            if (!char.IsDigit(input[i]))
            {
                return false;
            }
        }

        return true;
    }
}

这个方法完全基于你提到的char.IsDigit(),逻辑清晰,适合需要避免正则依赖的场景。


内容的提问来源于stack exchange,提问作者axcelenator

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.27 15:27:37