C#正则表达式匹配重复模式:精准匹配特定格式文本
C#正则表达式实现指定模式的重复匹配
当然可以,正则本身就支持通过重复量词来指定模式的重复次数,不用额外的迭代器,用{n}语法就能精准控制某段模式重复恰好7次。
最终正则表达式
^X:\s*([+-]?\d+)(?:\s+([+-]?\d+)){6}\s*mG$
各部分解释
^X::严格匹配字符串开头的X:\s*:匹配第一个整数前的任意数量空格(包括没有空格的情况)([+-]?\d+):捕获一个带可选正负号的整数——[+-]?表示正负号可有可无,\d+匹配一个或多个数字(?:\s+([+-]?\d+)){6}:这是一个非捕获组((?:...)),里面是“至少一个空格+带正负号的整数”的组合,指定重复6次;加上前面的1个整数,刚好凑够7个\s*mG$:匹配结尾前的任意数量空格,然后是mG,并确保这是字符串的结尾(避免后面还有多余内容)
C#代码示例
using System.Text.RegularExpressions; // 测试输入 string testInput = "X: -100 +200 300 -40 +5 6 -7 mG"; string regexPattern = @"^X:\s*([+-]?\d+)(?:\s+([+-]?\d+)){6}\s*mG$"; // 验证格式是否匹配 bool isValid = Regex.IsMatch(testInput, regexPattern); Console.WriteLine($"格式是否有效:{isValid}"); // 输出 True // 提取所有7个整数 Match matchResult = Regex.Match(testInput, regexPattern); if (matchResult.Success) { Console.WriteLine("提取到的7个整数:"); for (int i = 1; i <= 7; i++) { Console.WriteLine($"第{i}个:{matchResult.Groups[i].Value}"); } }
额外说明
- 如果只是验证格式、不需要提取整数,可以把所有捕获组改成非捕获组,简化正则:
^X:\s*(?:[+-]?\d+)(?:\s+[+-]?\d+){6}\s*mG$ - 如果只想匹配普通空格(不包含制表符等其他空白),把所有
\s换成空格字符即可
内容的提问来源于stack exchange,提问作者Markus F
相关产品推荐
相关产品推荐

