目录
  1. 1. 导入必要的命名空间
  2. 2. 定义主类和主方法
  3. 3. 定义ExtractNumbers方法
    1. 3.0.0.1. 正则表达式解释
  • 4. 运行程序并查看结果
  • 5. 数据使用
  • 6. 完整代码示意
  • 7. 运行结果
  • 使用正则表达式提取字符串中的数字

    本文以控制台程序为例,描述了在C#中使用正则表达式可以从字符串中提取数字,便于对字段中的数字进行进一步的处理;

    导入必要的命名空间

    在程序的开头,我们需要导入一些命名空间。这些命名空间提供了我们需要使用的类和方法。

    1
    2
    3
    using System;
    using System.Collections.Generic;
    using System.Text.RegularExpressions;

    定义主类和主方法

    接下来,我们定义一个主类Program和一个Main方法。这是程序的入口点。

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    class Program
    {
    static void Main()
    {
    // 示例数据
    List<string> data = new List<string>
    {
    "加腋200*300",
    "200x300mm",
    "200mmx300mm",
    "200*300",
    "200-300",
    "200_23——300",
    "200mm_2300mm",
    "100mm至与200mm 混凝土"
    };

    // 遍历并提取数字
    foreach (string item in data)
    {
    List<int> numbers = ExtractNumbers(item);
    Console.WriteLine($"从 '{item}' 提取到的数字: {string.Join(", ", numbers)}");
    }
    }
    }

    Main方法中,我们定义了一个包含示例数据的列表。然后,我们遍历每个字符串,并使用一个名为ExtractNumbers的方法来提取其中的数字。

    定义ExtractNumbers方法

    ExtractNumbers方法使用正则表达式从字符串中提取所有数字,并返回一个包含这些数字的列表。

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    static List<int> ExtractNumbers(string text)
    {
    // 使用正则表达式提取所有的数字
    MatchCollection matches = Regex.Matches(text, @"\d+");
    List<int> numbers = new List<int>();

    foreach (Match match in matches)
    {
    numbers.Add(int.Parse(match.Value));
    }

    return numbers;
    }
    正则表达式解释
    • Regex.Matches(text, @"\d+"): 这个方法使用正则表达式@"\d+"在文本中查找所有匹配的数字。\d+表示一个或多个连续的数字。
    • MatchCollection matches: 这个变量存储所有匹配的结果。
    • foreach (Match match in matches): 遍历所有匹配的结果,并将每个匹配的数字转换为整数并添加到数字列表中。

    运行程序并查看结果

    当你运行程序时,它将遍历示例数据中的每个字符串,并打印提取到的数字。例如:

    1
    2
    3
    4
    5
    6
    7
    8
    从 '加腋200*300' 提取到的数字: 200, 300
    从 '200x300mm' 提取到的数字: 200, 300
    从 '200mmx300mm' 提取到的数字: 200, 300
    从 '200*300' 提取到的数字: 200, 300
    从 '200-300' 提取到的数字: 200, 300
    从 '200_23——300' 提取到的数字: 200, 23, 300
    从 '200mm_2300mm' 提取到的数字: 200, 2300
    从 '100mm至与200mm 混凝土' 提取到的数字: 100, 200

    数据使用

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    // 获取第一个数字
    static int GetFirstNumber(List<int> numbers)
    {
    return numbers[0];
    }

    // 获取第二个数字
    static int GetSecondNumber(List<int> numbers)
    {
    return numbers[1];
    }

    // 获取最大的数字
    static int GetMaxNumber(List<int> numbers)
    {
    return numbers.Max();
    }

    完整代码示意

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    using System.Collections.Generic;
    using System.Text.RegularExpressions;
    using System.Linq;

    class Program
    {
    static void Main()
    {
    // 示例数据
    List<string> data = new List<string>
    {
    "加腋200*300",
    "200x300mm",
    "200mmx300mm",
    "200*300",
    "200-300",
    "200_23——300",
    "200mm_2300mm",
    "100mm至与200mm 混凝土"
    };

    // 遍历并提取数字
    foreach (string item in data)
    {
    List<int> numbers = ExtractNumbers(item);
    Console.WriteLine($"从 '{item}' 提取到的数字: {string.Join(", ", numbers)}");

    if (numbers.Count > 0)
    {
    int firstNumber = GetFirstNumber(numbers);
    Console.WriteLine($"第一个数字: {firstNumber}");
    }

    if (numbers.Count > 1)
    {
    int secondNumber = GetSecondNumber(numbers);
    Console.WriteLine($"第二个数字: {secondNumber}");
    }

    if (numbers.Count > 0)
    {
    int maxNumber = GetMaxNumber(numbers);
    Console.WriteLine($"最大的数字: {maxNumber}");
    }

    Console.WriteLine();
    }
    }

    // 提取所有数字
    static List<int> ExtractNumbers(string text)
    {
    // 使用正则表达式提取所有的数字
    MatchCollection matches = Regex.Matches(text, @"\d+");
    List<int> numbers = new List<int>();

    foreach (Match match in matches)
    {
    numbers.Add(int.Parse(match.Value));
    }

    return numbers;
    }

    // 获取第一个数字
    static int GetFirstNumber(List<int> numbers)
    {
    return numbers[0];
    }

    // 获取第二个数字
    static int GetSecondNumber(List<int> numbers)
    {
    return numbers[1];
    }

    // 获取最大的数字
    static int GetMaxNumber(List<int> numbers)
    {
    return numbers.Max();
    }
    }

    运行结果

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    从 '加腋200*300' 提取到的数字: 200, 300
    第一个数字: 200
    第二个数字: 300
    最大的数字: 300

    从 '200x300mm' 提取到的数字: 200, 300
    第一个数字: 200
    第二个数字: 300
    最大的数字: 300

    从 '200mmx300mm' 提取到的数字: 200, 300
    第一个数字: 200
    第二个数字: 300
    最大的数字: 300

    从 '200*300' 提取到的数字: 200, 300
    第一个数字: 200
    第二个数字: 300
    最大的数字: 300

    从 '200-300' 提取到的数字: 200, 300
    第一个数字: 200
    第二个数字: 300
    最大的数字: 300

    从 '200_23——300' 提取到的数字: 200, 23, 300
    第一个数字: 200
    第二个数字: 23
    最大的数字: 300

    从 '200mm_2300mm' 提取到的数字: 200, 2300
    第一个数字: 200
    第二个数字: 2300
    最大的数字: 2300

    从 '100mm至与200mm 混凝土' 提取到的数字: 100, 200
    第一个数字: 100
    第二个数字: 200
    最大的数字: 200
    文章作者: 嗜血星空earth
    文章链接: http://sxxkearth.github.io/2025/01/23/%E4%BD%BF%E7%94%A8%E6%AD%A3%E5%88%99%E8%A1%A8%E8%BE%BE%E5%BC%8F%E6%8F%90%E5%8F%96%E5%AD%97%E7%AC%A6%E4%B8%B2%E4%B8%AD%E7%9A%84%E6%95%B0%E5%AD%97/
    版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请附以署名及出处!

    评论