本文以控制台程序为例,描述了在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
方法使用正则表达式从字符串中提取所有数字,并返回一个包含这些数字的列表。
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
|